KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > repository > clientimpl > variant > RemoteVariantStrategy


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc name, AuthenticatedUser user) throws RepositoryException {
63         DaisyHttpClient httpClient = getClient(user);
64         String JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc name, AuthenticatedUser user) throws RepositoryException {
144         DaisyHttpClient httpClient = getClient(user);
145         String JavaDoc 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 JavaDoc 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 JavaDoc 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