1 16 package org.outerj.daisy.repository.clientimpl.variant; 17 18 import org.outerj.daisy.repository.commonimpl.variant.VariantStrategy; 19 import org.outerj.daisy.repository.commonimpl.variant.BranchImpl; 20 import org.outerj.daisy.repository.commonimpl.variant.LanguageImpl; 21 import org.outerj.daisy.repository.commonimpl.AuthenticatedUser; 22 import org.outerj.daisy.repository.RepositoryException; 23 import org.outerj.daisy.repository.RepositoryEventType; 24 import org.outerj.daisy.repository.clientimpl.infrastructure.AbstractRemoteStrategy; 25 import org.outerj.daisy.repository.clientimpl.infrastructure.DaisyHttpClient; 26 import org.outerj.daisy.repository.clientimpl.RemoteRepositoryManager; 27 import org.apache.commons.httpclient.HttpMethod; 28 import org.apache.commons.httpclient.methods.GetMethod; 29 import org.apache.commons.httpclient.methods.PostMethod; 30 import org.apache.commons.httpclient.methods.DeleteMethod; 31 import org.outerx.daisy.x10.BranchDocument; 32 import org.outerx.daisy.x10.BranchesDocument; 33 import org.outerx.daisy.x10.LanguageDocument; 34 import org.outerx.daisy.x10.LanguagesDocument; 35 36 public class RemoteVariantStrategy extends AbstractRemoteStrategy implements VariantStrategy { 37 public RemoteVariantStrategy(RemoteRepositoryManager.Context context) { 38 super(context); 39 } 40 41 public BranchImpl getBranch(long id, AuthenticatedUser user) throws RepositoryException { 42 DaisyHttpClient httpClient = getClient(user); 43 HttpMethod method = new GetMethod("/repository/branch/" + id); 44 45 BranchDocument branchDocument = (BranchDocument)httpClient.executeMethod(method, BranchDocument.class, true); 46 BranchDocument.Branch branchXml = branchDocument.getBranch(); 47 BranchImpl branch = instantiateBranchFromXml(branchXml, user); 48 return branch; 49 } 50 51 private BranchImpl instantiateBranchFromXml(BranchDocument.Branch branchXml, AuthenticatedUser user) { 52 BranchImpl branch = new BranchImpl(this, branchXml.getName(), user); 53 branch.setDescription(branchXml.getDescription()); 54 BranchImpl.IntimateAccess branchInt = branch.getIntimateAccess(this); 55 branchInt.setLastModified(branchXml.getLastModified().getTime()); 56 branchInt.setLastModifier(branchXml.getLastModifier()); 57 branchInt.setUpdateCount(branchXml.getUpdateCount()); 58 branchInt.setId(branchXml.getId()); 59 return branch; 60 } 61 62 public BranchImpl getBranchByName(String name, AuthenticatedUser user) throws RepositoryException { 63 DaisyHttpClient httpClient = getClient(user); 64 String encodedName = encodeNameForUseInPath("branch", name); 65 HttpMethod method = new GetMethod("/repository/branchByName/" + encodedName); 66 67 BranchDocument branchDocument = (BranchDocument)httpClient.executeMethod(method, BranchDocument.class, true); 68 BranchDocument.Branch branchXml = branchDocument.getBranch(); 69 BranchImpl branch = instantiateBranchFromXml(branchXml, user); 70 return branch; 71 } 72 73 public BranchImpl[] getAllBranches(AuthenticatedUser user) throws RepositoryException { 74 DaisyHttpClient httpClient = getClient(user); 75 HttpMethod method = new GetMethod("/repository/branch"); 76 77 BranchesDocument branchesDocument = (BranchesDocument)httpClient.executeMethod(method, BranchesDocument.class, true); 78 BranchDocument.Branch[] branchesXml = branchesDocument.getBranches().getBranchArray(); 79 80 BranchImpl[] branches = new BranchImpl[branchesXml.length]; 81 for (int i = 0; i < branchesXml.length; i++) { 82 branches[i] = instantiateBranchFromXml(branchesXml[i], user); 83 } 84 return branches; 85 } 86 87 public void storeBranch(BranchImpl branch) throws RepositoryException { 88 BranchImpl.IntimateAccess branchInt = branch.getIntimateAccess(this); 89 DaisyHttpClient httpClient = getClient(branchInt.getCurrentUser()); 90 91 String url = "/repository"; 92 boolean isNew = branch.getId() == -1; 93 if (isNew) 94 url += "/branch"; 95 else 96 url += "/branch/" + branch.getId(); 97 98 PostMethod method = new PostMethod(url); 99 method.setRequestBody(branch.getXml().newInputStream()); 100 101 BranchDocument branchDocument = (BranchDocument)httpClient.executeMethod(method, BranchDocument.class, true); 102 BranchDocument.Branch branchXml = branchDocument.getBranch(); 103 branchInt.setId(branchXml.getId()); 104 branchInt.setLastModified(branchXml.getLastModified().getTime()); 105 branchInt.setLastModifier(branchXml.getLastModifier()); 106 branchInt.setUpdateCount(branchXml.getUpdateCount()); 107 108 if (isNew) 109 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.BRANCH_CREATED, branch.getId(), branch.getUpdateCount()); 110 else 111 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.BRANCH_UPDATED, branch.getId(), branch.getUpdateCount()); 112 } 113 114 public void deleteBranch(long id, AuthenticatedUser user) throws RepositoryException { 115 DaisyHttpClient httpClient = getClient(user); 116 String url = "/repository/branch/" + id; 117 DeleteMethod method = new DeleteMethod(url); 118 httpClient.executeMethod(method, null, true); 119 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.BRANCH_DELETED, id, -1); 120 } 121 122 public LanguageImpl getLanguage(long id, AuthenticatedUser user) throws RepositoryException { 123 DaisyHttpClient httpClient = getClient(user); 124 HttpMethod method = new GetMethod("/repository/language/" + id); 125 126 LanguageDocument languageDocument = (LanguageDocument)httpClient.executeMethod(method, LanguageDocument.class, true); 127 LanguageDocument.Language languageXml = languageDocument.getLanguage(); 128 LanguageImpl language = instantiateLanguageFromXml(languageXml, user); 129 return language; 130 } 131 132 private LanguageImpl instantiateLanguageFromXml(LanguageDocument.Language languageXml, AuthenticatedUser user) { 133 LanguageImpl language = new LanguageImpl(this, languageXml.getName(), user); 134 language.setDescription(languageXml.getDescription()); 135 LanguageImpl.IntimateAccess languageInt = language.getIntimateAccess(this); 136 languageInt.setLastModified(languageXml.getLastModified().getTime()); 137 languageInt.setLastModifier(languageXml.getLastModifier()); 138 languageInt.setUpdateCount(languageXml.getUpdateCount()); 139 languageInt.setId(languageXml.getId()); 140 return language; 141 } 142 143 public LanguageImpl getLanguageByName(String name, AuthenticatedUser user) throws RepositoryException { 144 DaisyHttpClient httpClient = getClient(user); 145 String encodedName = encodeNameForUseInPath("language", name); 146 HttpMethod method = new GetMethod("/repository/languageByName/" + encodedName); 147 148 LanguageDocument languageDocument = (LanguageDocument)httpClient.executeMethod(method, LanguageDocument.class, true); 149 LanguageDocument.Language languageXml = languageDocument.getLanguage(); 150 LanguageImpl language = instantiateLanguageFromXml(languageXml, user); 151 return language; 152 } 153 154 public LanguageImpl[] getAllLanguages(AuthenticatedUser user) throws RepositoryException { 155 DaisyHttpClient httpClient = getClient(user); 156 HttpMethod method = new GetMethod("/repository/language"); 157 158 LanguagesDocument languagesDocument = (LanguagesDocument)httpClient.executeMethod(method, LanguagesDocument.class, true); 159 LanguageDocument.Language[] languagesXml = languagesDocument.getLanguages().getLanguageArray(); 160 161 LanguageImpl[] languages = new LanguageImpl[languagesXml.length]; 162 for (int i = 0; i < languagesXml.length; i++) { 163 languages[i] = instantiateLanguageFromXml(languagesXml[i], user); 164 } 165 return languages; 166 } 167 168 public void storeLanguage(LanguageImpl language) throws RepositoryException { 169 LanguageImpl.IntimateAccess languageInt = language.getIntimateAccess(this); 170 DaisyHttpClient httpClient = getClient(languageInt.getCurrentUser()); 171 172 String url = "/repository"; 173 boolean isNew = language.getId() == -1; 174 if (isNew) 175 url += "/language"; 176 else 177 url += "/language/" + language.getId(); 178 179 PostMethod method = new PostMethod(url); 180 method.setRequestBody(language.getXml().newInputStream()); 181 182 LanguageDocument languageDocument = (LanguageDocument)httpClient.executeMethod(method, LanguageDocument.class, true); 183 LanguageDocument.Language languageXml = languageDocument.getLanguage(); 184 languageInt.setId(languageXml.getId()); 185 languageInt.setLastModified(languageXml.getLastModified().getTime()); 186 languageInt.setLastModifier(languageXml.getLastModifier()); 187 languageInt.setUpdateCount(languageXml.getUpdateCount()); 188 189 if (isNew) 190 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.LANGUAGE_CREATED, language.getId(), language.getUpdateCount()); 191 else 192 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.LANGUAGE_UPDATED, language.getId(), language.getUpdateCount()); 193 } 194 195 public void deleteLanguage(long id, AuthenticatedUser user) throws RepositoryException { 196 DaisyHttpClient httpClient = getClient(user); 197 String url = "/repository/language/" + id; 198 DeleteMethod method = new DeleteMethod(url); 199 httpClient.executeMethod(method, null, true); 200 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.LANGUAGE_DELETED, id, -1); 201 } 202 } 203 | Popular Tags |