001: /*
002: * Copyright 2004 Outerthought bvba and Schaubroeck nv
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.outerj.daisy.repository.clientimpl.variant;
017:
018: import org.outerj.daisy.repository.commonimpl.variant.VariantStrategy;
019: import org.outerj.daisy.repository.commonimpl.variant.BranchImpl;
020: import org.outerj.daisy.repository.commonimpl.variant.LanguageImpl;
021: import org.outerj.daisy.repository.commonimpl.AuthenticatedUser;
022: import org.outerj.daisy.repository.RepositoryException;
023: import org.outerj.daisy.repository.RepositoryEventType;
024: import org.outerj.daisy.repository.clientimpl.infrastructure.AbstractRemoteStrategy;
025: import org.outerj.daisy.repository.clientimpl.infrastructure.DaisyHttpClient;
026: import org.outerj.daisy.repository.clientimpl.RemoteRepositoryManager;
027: import org.apache.commons.httpclient.HttpMethod;
028: import org.apache.commons.httpclient.methods.GetMethod;
029: import org.apache.commons.httpclient.methods.PostMethod;
030: import org.apache.commons.httpclient.methods.DeleteMethod;
031: import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
032: import org.outerx.daisy.x10.BranchDocument;
033: import org.outerx.daisy.x10.BranchesDocument;
034: import org.outerx.daisy.x10.LanguageDocument;
035: import org.outerx.daisy.x10.LanguagesDocument;
036:
037: import java.util.List;
038:
039: public class RemoteVariantStrategy extends AbstractRemoteStrategy
040: implements VariantStrategy {
041: public RemoteVariantStrategy(RemoteRepositoryManager.Context context) {
042: super (context);
043: }
044:
045: public BranchImpl getBranch(long id, AuthenticatedUser user)
046: throws RepositoryException {
047: DaisyHttpClient httpClient = getClient(user);
048: HttpMethod method = new GetMethod("/repository/branch/" + id);
049:
050: BranchDocument branchDocument = (BranchDocument) httpClient
051: .executeMethod(method, BranchDocument.class, true);
052: BranchDocument.Branch branchXml = branchDocument.getBranch();
053: BranchImpl branch = instantiateBranchFromXml(branchXml, user);
054: return branch;
055: }
056:
057: private BranchImpl instantiateBranchFromXml(
058: BranchDocument.Branch branchXml, AuthenticatedUser user) {
059: BranchImpl branch = new BranchImpl(this , branchXml.getName(),
060: user);
061: branch.setDescription(branchXml.getDescription());
062: BranchImpl.IntimateAccess branchInt = branch
063: .getIntimateAccess(this );
064: branchInt
065: .setLastModified(branchXml.getLastModified().getTime());
066: branchInt.setLastModifier(branchXml.getLastModifier());
067: branchInt.setUpdateCount(branchXml.getUpdateCount());
068: branchInt.setId(branchXml.getId());
069: return branch;
070: }
071:
072: public BranchImpl getBranchByName(String name,
073: AuthenticatedUser user) throws RepositoryException {
074: DaisyHttpClient httpClient = getClient(user);
075: String encodedName = encodeNameForUseInPath("branch", name);
076: HttpMethod method = new GetMethod("/repository/branchByName/"
077: + encodedName);
078:
079: BranchDocument branchDocument = (BranchDocument) httpClient
080: .executeMethod(method, BranchDocument.class, true);
081: BranchDocument.Branch branchXml = branchDocument.getBranch();
082: BranchImpl branch = instantiateBranchFromXml(branchXml, user);
083: return branch;
084: }
085:
086: public BranchImpl[] getAllBranches(AuthenticatedUser user)
087: throws RepositoryException {
088: DaisyHttpClient httpClient = getClient(user);
089: HttpMethod method = new GetMethod("/repository/branch");
090:
091: BranchesDocument branchesDocument = (BranchesDocument) httpClient
092: .executeMethod(method, BranchesDocument.class, true);
093: List<BranchDocument.Branch> branchesXml = branchesDocument
094: .getBranches().getBranchList();
095:
096: BranchImpl[] branches = new BranchImpl[branchesXml.size()];
097: for (int i = 0; i < branchesXml.size(); i++) {
098: branches[i] = instantiateBranchFromXml(branchesXml.get(i),
099: user);
100: }
101: return branches;
102: }
103:
104: public void storeBranch(BranchImpl branch)
105: throws RepositoryException {
106: BranchImpl.IntimateAccess branchInt = branch
107: .getIntimateAccess(this );
108: DaisyHttpClient httpClient = getClient(branchInt
109: .getCurrentUser());
110:
111: String url = "/repository";
112: boolean isNew = branch.getId() == -1;
113: if (isNew)
114: url += "/branch";
115: else
116: url += "/branch/" + branch.getId();
117:
118: PostMethod method = new PostMethod(url);
119: method.setRequestEntity(new InputStreamRequestEntity(branch
120: .getXml().newInputStream()));
121:
122: BranchDocument branchDocument = (BranchDocument) httpClient
123: .executeMethod(method, BranchDocument.class, true);
124: BranchDocument.Branch branchXml = branchDocument.getBranch();
125: branchInt.setId(branchXml.getId());
126: branchInt
127: .setLastModified(branchXml.getLastModified().getTime());
128: branchInt.setLastModifier(branchXml.getLastModifier());
129: branchInt.setUpdateCount(branchXml.getUpdateCount());
130:
131: if (isNew)
132: context.getCommonRepository().fireRepositoryEvent(
133: RepositoryEventType.BRANCH_CREATED,
134: new Long(branch.getId()), branch.getUpdateCount());
135: else
136: context.getCommonRepository().fireRepositoryEvent(
137: RepositoryEventType.BRANCH_UPDATED,
138: new Long(branch.getId()), branch.getUpdateCount());
139: }
140:
141: public void deleteBranch(long id, AuthenticatedUser user)
142: throws RepositoryException {
143: DaisyHttpClient httpClient = getClient(user);
144: String url = "/repository/branch/" + id;
145: DeleteMethod method = new DeleteMethod(url);
146: httpClient.executeMethod(method, null, true);
147: context.getCommonRepository().fireRepositoryEvent(
148: RepositoryEventType.BRANCH_DELETED, new Long(id), -1);
149: }
150:
151: public LanguageImpl getLanguage(long id, AuthenticatedUser user)
152: throws RepositoryException {
153: DaisyHttpClient httpClient = getClient(user);
154: HttpMethod method = new GetMethod("/repository/language/" + id);
155:
156: LanguageDocument languageDocument = (LanguageDocument) httpClient
157: .executeMethod(method, LanguageDocument.class, true);
158: LanguageDocument.Language languageXml = languageDocument
159: .getLanguage();
160: LanguageImpl language = instantiateLanguageFromXml(languageXml,
161: user);
162: return language;
163: }
164:
165: private LanguageImpl instantiateLanguageFromXml(
166: LanguageDocument.Language languageXml,
167: AuthenticatedUser user) {
168: LanguageImpl language = new LanguageImpl(this , languageXml
169: .getName(), user);
170: language.setDescription(languageXml.getDescription());
171: LanguageImpl.IntimateAccess languageInt = language
172: .getIntimateAccess(this );
173: languageInt.setLastModified(languageXml.getLastModified()
174: .getTime());
175: languageInt.setLastModifier(languageXml.getLastModifier());
176: languageInt.setUpdateCount(languageXml.getUpdateCount());
177: languageInt.setId(languageXml.getId());
178: return language;
179: }
180:
181: public LanguageImpl getLanguageByName(String name,
182: AuthenticatedUser user) throws RepositoryException {
183: DaisyHttpClient httpClient = getClient(user);
184: String encodedName = encodeNameForUseInPath("language", name);
185: HttpMethod method = new GetMethod("/repository/languageByName/"
186: + encodedName);
187:
188: LanguageDocument languageDocument = (LanguageDocument) httpClient
189: .executeMethod(method, LanguageDocument.class, true);
190: LanguageDocument.Language languageXml = languageDocument
191: .getLanguage();
192: LanguageImpl language = instantiateLanguageFromXml(languageXml,
193: user);
194: return language;
195: }
196:
197: public LanguageImpl[] getAllLanguages(AuthenticatedUser user)
198: throws RepositoryException {
199: DaisyHttpClient httpClient = getClient(user);
200: HttpMethod method = new GetMethod("/repository/language");
201:
202: LanguagesDocument languagesDocument = (LanguagesDocument) httpClient
203: .executeMethod(method, LanguagesDocument.class, true);
204: List<LanguageDocument.Language> languagesXml = languagesDocument
205: .getLanguages().getLanguageList();
206:
207: LanguageImpl[] languages = new LanguageImpl[languagesXml.size()];
208: for (int i = 0; i < languagesXml.size(); i++) {
209: languages[i] = instantiateLanguageFromXml(languagesXml
210: .get(i), user);
211: }
212: return languages;
213: }
214:
215: public void storeLanguage(LanguageImpl language)
216: throws RepositoryException {
217: LanguageImpl.IntimateAccess languageInt = language
218: .getIntimateAccess(this );
219: DaisyHttpClient httpClient = getClient(languageInt
220: .getCurrentUser());
221:
222: String url = "/repository";
223: boolean isNew = language.getId() == -1;
224: if (isNew)
225: url += "/language";
226: else
227: url += "/language/" + language.getId();
228:
229: PostMethod method = new PostMethod(url);
230: method.setRequestEntity(new InputStreamRequestEntity(language
231: .getXml().newInputStream()));
232:
233: LanguageDocument languageDocument = (LanguageDocument) httpClient
234: .executeMethod(method, LanguageDocument.class, true);
235: LanguageDocument.Language languageXml = languageDocument
236: .getLanguage();
237: languageInt.setId(languageXml.getId());
238: languageInt.setLastModified(languageXml.getLastModified()
239: .getTime());
240: languageInt.setLastModifier(languageXml.getLastModifier());
241: languageInt.setUpdateCount(languageXml.getUpdateCount());
242:
243: if (isNew)
244: context.getCommonRepository().fireRepositoryEvent(
245: RepositoryEventType.LANGUAGE_CREATED,
246: new Long(language.getId()),
247: language.getUpdateCount());
248: else
249: context.getCommonRepository().fireRepositoryEvent(
250: RepositoryEventType.LANGUAGE_UPDATED,
251: new Long(language.getId()),
252: language.getUpdateCount());
253: }
254:
255: public void deleteLanguage(long id, AuthenticatedUser user)
256: throws RepositoryException {
257: DaisyHttpClient httpClient = getClient(user);
258: String url = "/repository/language/" + id;
259: DeleteMethod method = new DeleteMethod(url);
260: httpClient.executeMethod(method, null, true);
261: context.getCommonRepository().fireRepositoryEvent(
262: RepositoryEventType.LANGUAGE_DELETED, new Long(id), -1);
263: }
264: }
|