KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > repository > clientimpl > schema > RemoteSchemaStrategy


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.schema;
17
18 import java.util.ArrayList JavaDoc;
19 import java.util.Collection JavaDoc;
20
21 import org.apache.commons.httpclient.HttpMethod;
22 import org.apache.commons.httpclient.methods.GetMethod;
23 import org.apache.commons.httpclient.methods.PostMethod;
24 import org.apache.commons.httpclient.methods.DeleteMethod;
25 import org.outerj.daisy.repository.RepositoryException;
26 import org.outerj.daisy.repository.ValueType;
27 import org.outerj.daisy.repository.LinkExtractorInfos;
28 import org.outerj.daisy.repository.LinkExtractorInfo;
29 import org.outerj.daisy.repository.clientimpl.RemoteRepositoryManager;
30 import org.outerj.daisy.repository.clientimpl.infrastructure.AbstractRemoteStrategy;
31 import org.outerj.daisy.repository.clientimpl.infrastructure.DaisyHttpClient;
32 import org.outerj.daisy.repository.commonimpl.AuthenticatedUser;
33 import org.outerj.daisy.repository.commonimpl.LinkExtractorInfoImpl;
34 import org.outerj.daisy.repository.commonimpl.LinkExtractorInfosImpl;
35 import org.outerj.daisy.repository.commonimpl.schema.DocumentTypeImpl;
36 import org.outerj.daisy.repository.commonimpl.schema.FieldTypeImpl;
37 import org.outerj.daisy.repository.commonimpl.schema.PartTypeImpl;
38 import org.outerj.daisy.repository.commonimpl.schema.SchemaStrategy;
39 import org.outerj.daisy.repository.schema.RepositorySchemaEventType;
40 import org.outerx.daisy.x10.*;
41
42 public class RemoteSchemaStrategy extends AbstractRemoteStrategy implements SchemaStrategy {
43     public RemoteSchemaStrategy(RemoteRepositoryManager.Context context) {
44         super(context);
45     }
46
47     public DocumentTypeImpl getDocumentTypeById(long id, AuthenticatedUser user) throws RepositoryException {
48         DaisyHttpClient httpClient = getClient(user);
49         HttpMethod method = new GetMethod("/repository/schema/documentType/" + id);
50
51         DocumentTypeDocument documentTypeDocument = (DocumentTypeDocument)httpClient.executeMethod(method, DocumentTypeDocument.class, true);
52         DocumentTypeDocument.DocumentType documentTypeXml = documentTypeDocument.getDocumentType();
53         DocumentTypeImpl documentType = instantiateDocumentTypeFromXml(documentTypeXml, user);
54         return documentType;
55     }
56
57     public DocumentTypeImpl getDocumentTypeByName(String JavaDoc name, AuthenticatedUser user) throws RepositoryException {
58         DaisyHttpClient httpClient = getClient(user);
59         String JavaDoc encodedName = encodeNameForUseInPath("document type", name);
60         HttpMethod method = new GetMethod("/repository/schema/documentTypeByName/" + encodedName);
61
62         DocumentTypeDocument documentTypeDocument = (DocumentTypeDocument)httpClient.executeMethod(method, DocumentTypeDocument.class, true);
63         DocumentTypeDocument.DocumentType documentTypeXml = documentTypeDocument.getDocumentType();
64         DocumentTypeImpl documentType = instantiateDocumentTypeFromXml(documentTypeXml, user);
65         return documentType;
66     }
67
68     public void store(DocumentTypeImpl documentType) throws RepositoryException {
69         DocumentTypeImpl.IntimateAccess documentTypeInt = documentType.getIntimateAccess(this);
70         DaisyHttpClient httpClient = getClient(documentTypeInt.getCurrentModifier());
71
72         String JavaDoc url = "/repository";
73         boolean isNew = documentType.getId() == -1;
74         if (isNew)
75             url += "/schema/documentType";
76         else
77             url += "/schema/documentType/" + documentType.getId();
78
79         PostMethod method = new PostMethod(url);
80         method.setRequestBody(documentType.getXml().newInputStream());
81
82         DocumentTypeDocument documentTypeDocument = (DocumentTypeDocument)httpClient.executeMethod(method, DocumentTypeDocument.class, true);
83         DocumentTypeDocument.DocumentType documentTypeXml = documentTypeDocument.getDocumentType();
84         documentTypeInt.setId(documentTypeXml.getId());
85         documentTypeInt.setLastModified(documentTypeXml.getLastModified().getTime());
86         documentTypeInt.setLastModifier(documentTypeXml.getLastModifier());
87         documentTypeInt.setUpdateCount(documentTypeXml.getUpdateCount());
88
89         if (isNew)
90             context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.DOCUMENT_TYPE_CREATED, documentType.getId(), documentType.getUpdateCount());
91         else
92             context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.DOCUMENT_TYPE_UPDATED, documentType.getId(), documentType.getUpdateCount());
93     }
94
95     public void deleteDocumentType(long documentTypeId, AuthenticatedUser user) throws RepositoryException {
96         DaisyHttpClient httpClient = getClient(user);
97
98         String JavaDoc url = "/repository/schema/documentType/" + documentTypeId;
99
100         DeleteMethod method = new DeleteMethod(url);
101         httpClient.executeMethod(method, null, true);
102         context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.DOCUMENT_TYPE_DELETED, documentTypeId, -1);
103     }
104
105     public Collection JavaDoc getAllDocumentTypes(AuthenticatedUser user) throws RepositoryException {
106         DaisyHttpClient httpClient = getClient(user);
107         HttpMethod method = new GetMethod("/repository/schema/documentType");
108
109         DocumentTypesDocument documentTypesDocument = (DocumentTypesDocument)httpClient.executeMethod(method, DocumentTypesDocument.class, true);
110         DocumentTypesDocument.DocumentTypes documentTypesElement = documentTypesDocument.getDocumentTypes();
111
112         DocumentTypeDocument.DocumentType[] documentTypesXml = documentTypesElement.getDocumentTypeArray();
113         ArrayList JavaDoc documentTypes = new ArrayList JavaDoc(documentTypesXml.length);
114         for (int i = 0; i < documentTypesXml.length; i++) {
115             DocumentTypeImpl documentType = instantiateDocumentTypeFromXml(documentTypesXml[i], user);
116             documentTypes.add(documentType);
117         }
118         return documentTypes;
119     }
120
121     private DocumentTypeImpl instantiateDocumentTypeFromXml(DocumentTypeDocument.DocumentType documentTypeXml, AuthenticatedUser user) {
122         DocumentTypeImpl documentType = new DocumentTypeImpl(documentTypeXml.getName(), this,
123                 context.getCommonRepositorySchema(), user);
124         DocumentTypeImpl.IntimateAccess documentTypeInt = documentType.getIntimateAccess(this);
125         documentType.setAllFromXml(documentTypeXml);
126         documentTypeInt.setLastModified(documentTypeXml.getLastModified().getTime());
127         documentTypeInt.setLastModifier(documentTypeXml.getLastModifier());
128         documentTypeInt.setId(documentTypeXml.getId());
129         documentTypeInt.setUpdateCount(documentTypeXml.getUpdateCount());
130         return documentType;
131     }
132
133     public PartTypeImpl getPartTypeById(long id, AuthenticatedUser user) throws RepositoryException {
134         DaisyHttpClient httpClient = getClient(user);
135         HttpMethod method = new GetMethod("/repository/schema/partType/" + id);
136
137         PartTypeDocument partTypeDocument = (PartTypeDocument)httpClient.executeMethod(method, PartTypeDocument.class, true);
138         PartTypeDocument.PartType partTypeXml = partTypeDocument.getPartType();
139         PartTypeImpl partType = instantiatePartTypeFromXml(partTypeXml, user);
140         return partType;
141     }
142
143     public PartTypeImpl getPartTypeByName(String JavaDoc name, AuthenticatedUser user) throws RepositoryException {
144         DaisyHttpClient httpClient = getClient(user);
145         String JavaDoc encodedName = encodeNameForUseInPath("part type", name);
146         HttpMethod method = new GetMethod("/repository/schema/partTypeByName/" + encodedName);
147
148         PartTypeDocument partTypeDocument = (PartTypeDocument)httpClient.executeMethod(method, PartTypeDocument.class, true);
149         PartTypeDocument.PartType partTypeXml = partTypeDocument.getPartType();
150         PartTypeImpl partType = instantiatePartTypeFromXml(partTypeXml, user);
151         return partType;
152     }
153
154     public void store(PartTypeImpl partType) throws RepositoryException {
155         PartTypeImpl.IntimateAccess partTypeInt = partType.getIntimateAccess(this);
156         DaisyHttpClient httpClient = getClient(partTypeInt.getCurrentModifier());
157
158         String JavaDoc url = "/repository";
159         boolean isNew = partType.getId() == -1;
160         if (isNew)
161             url += "/schema/partType";
162         else
163             url += "/schema/partType/" + partType.getId();
164
165         PostMethod method = new PostMethod(url);
166         method.setRequestBody(partType.getXml().newInputStream());
167
168         PartTypeDocument partTypeDocument = (PartTypeDocument)httpClient.executeMethod(method, PartTypeDocument.class, true);
169         PartTypeDocument.PartType partTypeXml = partTypeDocument.getPartType();
170         partTypeInt.setId(partTypeXml.getId());
171         partTypeInt.setLastModified(partTypeXml.getLastModified().getTime());
172         partTypeInt.setLastModifier(partTypeXml.getLastModifier());
173         partTypeInt.setUpdateCount(partTypeXml.getUpdateCount());
174
175         if (isNew)
176             context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.PART_TYPE_CREATED, partType.getId(), partType.getUpdateCount());
177         else
178             context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.PART_TYPE_UPDATED, partType.getId(), partType.getUpdateCount());
179     }
180
181     public void deletePartType(long partTypeId, AuthenticatedUser user) throws RepositoryException {
182         DaisyHttpClient httpClient = getClient(user);
183
184         String JavaDoc url = "/repository/schema/partType/" + partTypeId;
185
186         DeleteMethod method = new DeleteMethod(url);
187
188         httpClient.executeMethod(method, null, true);
189         context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.PART_TYPE_DELETED, partTypeId, -1);
190     }
191
192     public Collection JavaDoc getAllPartTypes(AuthenticatedUser user) throws RepositoryException {
193         DaisyHttpClient httpClient = getClient(user);
194         HttpMethod method = new GetMethod("/repository/schema/partType");
195
196         PartTypesDocument partTypesDocument = (PartTypesDocument)httpClient.executeMethod(method, PartTypesDocument.class, true);
197         PartTypesDocument.PartTypes partTypesElement = partTypesDocument.getPartTypes();
198         PartTypeDocument.PartType[] partTypesXml = partTypesElement.getPartTypeArray();
199         ArrayList JavaDoc partTypes = new ArrayList JavaDoc(partTypesXml.length);
200         for (int i = 0; i < partTypesXml.length; i++) {
201             PartTypeImpl partType = instantiatePartTypeFromXml(partTypesXml[i], user);
202             partTypes.add(partType);
203         }
204         return partTypes;
205     }
206
207     private PartTypeImpl instantiatePartTypeFromXml(PartTypeDocument.PartType partTypeXml, AuthenticatedUser user) {
208         PartTypeImpl partType = new PartTypeImpl(partTypeXml.getName(), partTypeXml.getMimeTypes(),
209                 this, user);
210         PartTypeImpl.IntimateAccess partTypeInt = partType.getIntimateAccess(this);
211         partType.setAllFromXml(partTypeXml);
212         partTypeInt.setId(partTypeXml.getId());
213         partTypeInt.setLastModified(partTypeXml.getLastModified().getTime());
214         partTypeInt.setLastModifier(partTypeXml.getLastModifier());
215         partTypeInt.setUpdateCount(partTypeXml.getUpdateCount());
216         return partType;
217     }
218
219     public FieldTypeImpl getFieldTypeById(long id, AuthenticatedUser user) throws RepositoryException {
220         DaisyHttpClient httpClient = getClient(user);
221         HttpMethod method = new GetMethod("/repository/schema/fieldType/" + id);
222
223         FieldTypeDocument fieldTypeDocument = (FieldTypeDocument)httpClient.executeMethod(method, FieldTypeDocument.class, true);
224         FieldTypeDocument.FieldType fieldTypeXml = fieldTypeDocument.getFieldType();
225         FieldTypeImpl fieldType = instantiateFieldTypeFromXml(fieldTypeXml, user);
226         return fieldType;
227     }
228
229     public FieldTypeImpl getFieldTypeByName(String JavaDoc name, AuthenticatedUser user) throws RepositoryException {
230         DaisyHttpClient httpClient = getClient(user);
231         String JavaDoc encodedName = encodeNameForUseInPath("field type", name);
232         HttpMethod method = new GetMethod("/repository/schema/fieldTypeByName/" + encodedName);
233
234         FieldTypeDocument fieldTypeDocument = (FieldTypeDocument)httpClient.executeMethod(method, FieldTypeDocument.class, true);
235         FieldTypeDocument.FieldType fieldTypeXml = fieldTypeDocument.getFieldType();
236         FieldTypeImpl fieldType = instantiateFieldTypeFromXml(fieldTypeXml, user);
237         return fieldType;
238     }
239
240     public void store(FieldTypeImpl fieldType) throws RepositoryException {
241         FieldTypeImpl.IntimateAccess fieldTypeInt = fieldType.getIntimateAccess(this);
242         DaisyHttpClient httpClient = getClient(fieldTypeInt.getCurrentModifier());
243
244         String JavaDoc url = "/repository";
245         boolean isNew = fieldType.getId() == -1;
246         if (isNew)
247             url += "/schema/fieldType";
248         else
249             url += "/schema/fieldType/" + fieldType.getId();
250
251         PostMethod method = new PostMethod(url);
252         method.setRequestBody(fieldType.getXml().newInputStream());
253
254         FieldTypeDocument fieldTypeDocument = (FieldTypeDocument)httpClient.executeMethod(method, FieldTypeDocument.class, true);
255         FieldTypeDocument.FieldType fieldTypeXml = fieldTypeDocument.getFieldType();
256         fieldTypeInt.setId(fieldTypeXml.getId());
257         fieldTypeInt.setLastModified(fieldTypeXml.getLastModified().getTime());
258         fieldTypeInt.setLastModifier(fieldTypeXml.getLastModifier());
259         fieldTypeInt.setUpdateCount(fieldTypeXml.getUpdateCount());
260
261         if (isNew)
262             context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.FIELD_TYPE_CREATED, fieldType.getId(), fieldType.getUpdateCount());
263         else
264             context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.FIELD_TYPE_UPDATED, fieldType.getId(), fieldType.getUpdateCount());
265     }
266
267     public void deleteFieldType(long fieldTypeId, AuthenticatedUser user) throws RepositoryException {
268         DaisyHttpClient httpClient = getClient(user);
269
270         String JavaDoc url = "/repository/schema/fieldType/" + fieldTypeId;
271
272         DeleteMethod method = new DeleteMethod(url);
273         httpClient.executeMethod(method, null, true);
274         context.getCommonRepositorySchema().fireChangeEvent(RepositorySchemaEventType.FIELD_TYPE_DELETED, fieldTypeId, -1);
275     }
276
277     public Collection JavaDoc getAllFieldTypes(AuthenticatedUser user) throws RepositoryException {
278         DaisyHttpClient httpClient = getClient(user);
279         HttpMethod method = new GetMethod("/repository/schema/fieldType");
280
281         FieldTypesDocument fieldTypesDocument = (FieldTypesDocument)httpClient.executeMethod(method, FieldTypesDocument.class, true);
282         FieldTypesDocument.FieldTypes fieldTypesElement = fieldTypesDocument.getFieldTypes();
283         FieldTypeDocument.FieldType[] fieldTypesXml = fieldTypesElement.getFieldTypeArray();
284         ArrayList JavaDoc fieldTypes = new ArrayList JavaDoc(fieldTypesXml.length);
285         for (int i = 0; i < fieldTypesXml.length; i++) {
286             FieldTypeImpl partType = instantiateFieldTypeFromXml(fieldTypesXml[i], user);
287             fieldTypes.add(partType);
288         }
289         return fieldTypes;
290     }
291
292     private FieldTypeImpl instantiateFieldTypeFromXml(FieldTypeDocument.FieldType fieldTypeXml, AuthenticatedUser user) {
293         FieldTypeImpl fieldType = new FieldTypeImpl(fieldTypeXml.getName(),
294                 ValueType.fromString(fieldTypeXml.getValueType()), fieldTypeXml.getMultiValue(), this,
295                 context.getCommonRepository(), user);
296         FieldTypeImpl.IntimateAccess fieldTypeInt = fieldType.getIntimateAccess(this);
297         fieldType.setAllFromXml(fieldTypeXml);
298         fieldTypeInt.setId(fieldTypeXml.getId());
299         fieldTypeInt.setLastModified(fieldTypeXml.getLastModified().getTime());
300         fieldTypeInt.setLastModifier(fieldTypeXml.getLastModifier());
301         fieldTypeInt.setUpdateCount(fieldTypeXml.getUpdateCount());
302         return fieldType;
303     }
304
305     public LinkExtractorInfos getLinkExtractors(AuthenticatedUser user) throws RepositoryException {
306         DaisyHttpClient httpClient = getClient(user);
307         HttpMethod method = new GetMethod("/repository/linkExtractors");
308
309         LinkExtractorsDocument linkExtractorsDocument = (LinkExtractorsDocument)httpClient.executeMethod(method, LinkExtractorsDocument.class, true);
310         LinkExtractorDocument.LinkExtractor[] linkExtractorsXml = linkExtractorsDocument.getLinkExtractors().getLinkExtractorArray();
311         LinkExtractorInfo[] linkExtractorInfos = new LinkExtractorInfo[linkExtractorsXml.length];
312         for (int i = 0; i < linkExtractorsXml.length; i++) {
313             linkExtractorInfos[i] = new LinkExtractorInfoImpl(linkExtractorsXml[i].getName(), linkExtractorsXml[i].getDescription());
314         }
315         return new LinkExtractorInfosImpl(linkExtractorInfos);
316     }
317 }
318
Popular Tags