1 16 package org.outerj.daisy.repository.clientimpl.schema; 17 18 import java.util.ArrayList ; 19 import java.util.Collection ; 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 name, AuthenticatedUser user) throws RepositoryException { 58 DaisyHttpClient httpClient = getClient(user); 59 String 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 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 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 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 documentTypes = new ArrayList (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 name, AuthenticatedUser user) throws RepositoryException { 144 DaisyHttpClient httpClient = getClient(user); 145 String 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 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 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 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 partTypes = new ArrayList (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 name, AuthenticatedUser user) throws RepositoryException { 230 DaisyHttpClient httpClient = getClient(user); 231 String 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 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 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 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 fieldTypes = new ArrayList (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 |