1 23 24 package org.infoglue.cms.webservices; 25 26 import java.io.ByteArrayInputStream ; 27 import java.io.InputStream ; 28 import java.util.ArrayList ; 29 import java.util.Date ; 30 import java.util.Iterator ; 31 import java.util.List ; 32 import java.util.Map ; 33 34 import org.apache.log4j.Logger; 35 import org.dom4j.Document; 36 import org.dom4j.Element; 37 import org.infoglue.cms.controllers.kernel.impl.simple.ContentController; 38 import org.infoglue.cms.controllers.kernel.impl.simple.ContentControllerProxy; 39 import org.infoglue.cms.controllers.kernel.impl.simple.ContentStateController; 40 import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController; 41 import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionControllerProxy; 42 import org.infoglue.cms.controllers.kernel.impl.simple.DigitalAssetController; 43 import org.infoglue.cms.controllers.kernel.impl.simple.PublicationController; 44 import org.infoglue.cms.controllers.kernel.impl.simple.UserControllerProxy; 45 import org.infoglue.cms.entities.content.ContentVO; 46 import org.infoglue.cms.entities.content.ContentVersionVO; 47 import org.infoglue.cms.entities.content.DigitalAssetVO; 48 import org.infoglue.cms.entities.publishing.PublicationVO; 49 import org.infoglue.cms.exception.SystemException; 50 import org.infoglue.cms.security.InfoGluePrincipal; 51 import org.infoglue.cms.util.dom.DOMBuilder; 52 import org.infoglue.cms.webservices.elements.RemoteAttachment; 53 import org.infoglue.deliver.util.webservices.DynamicWebserviceSerializer; 54 55 56 62 63 public class RemoteContentServiceImpl extends RemoteInfoGlueService 64 { 65 private final static Logger logger = Logger.getLogger(RemoteContentServiceImpl.class.getName()); 66 67 70 private InfoGluePrincipal principal; 71 72 private static ContentControllerProxy contentControllerProxy = ContentControllerProxy.getController(); 73 private static ContentVersionControllerProxy contentVersionControllerProxy = ContentVersionControllerProxy.getController(); 74 75 78 79 public int createContent(final String principalName, ContentVO contentVO, int parentContentId, int contentTypeDefinitionId, int repositoryId) 80 { 81 int newContentId = 0; 82 83 logger.info("***************************************"); 84 logger.info("Creating content through webservice...."); 85 logger.info("***************************************"); 86 87 logger.info("parentContentId:" + parentContentId); 88 logger.info("contentTypeDefinitionId:" + contentTypeDefinitionId); 89 logger.info("repositoryId:" + repositoryId); 90 91 try 92 { 93 initializePrincipal(principalName); 94 ContentVO newContentVO = contentControllerProxy.acCreate(this.principal, new Integer (parentContentId), new Integer (contentTypeDefinitionId), new Integer (repositoryId), contentVO); 95 newContentId = newContentVO.getId().intValue(); 96 } 97 catch(Exception e) 98 { 99 logger.error("En error occurred when we tried to create a new content:" + e.getMessage(), e); 100 } 101 102 updateCaches(); 103 104 return newContentId; 105 } 106 107 110 111 public int createContentVersion(final String principalName, ContentVersionVO contentVersionVO, int contentId, int languageId) 112 { 113 int newContentVersionId = 0; 114 115 logger.info("***************************************"); 116 logger.info("Creating content through webservice...."); 117 logger.info("***************************************"); 118 119 try 120 { 121 initializePrincipal(principalName); 122 ContentVersionVO newContentVersionVO = contentVersionControllerProxy.acCreate(this.principal, new Integer (contentId), new Integer (languageId), contentVersionVO); 123 newContentVersionId = newContentVersionVO.getId().intValue(); 124 } 125 catch(Exception e) 126 { 127 logger.error("En error occurred when we tried to create a new contentVersion:" + e.getMessage(), e); 128 } 129 130 updateCaches(); 131 132 return newContentVersionId; 133 } 134 135 136 139 140 public Boolean createContents(final String principalName, final Object [] inputsArray) 141 { 142 List newContentIdList = new ArrayList (); 143 144 logger.info("****************************************"); 145 logger.info("Creating contents through webservice...."); 146 logger.info("****************************************"); 147 148 logger.info("principalName:" + principalName); 149 logger.info("inputsArray:" + inputsArray); 150 152 try 153 { 154 final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer(); 155 List contents = (List ) serializer.deserialize(inputsArray); 156 logger.info("contents:" + contents); 157 158 initializePrincipal(principalName); 159 Iterator contentIterator = contents.iterator(); 160 while(contentIterator.hasNext()) 161 { 162 165 Map content = (Map )contentIterator.next(); 166 167 String name = (String )content.get("name"); 168 Integer contentTypeDefinitionId = (Integer )content.get("contentTypeDefinitionId"); 169 Integer repositoryId = (Integer )content.get("repositoryId"); 170 Integer parentContentId = (Integer )content.get("parentContentId"); 171 172 logger.info("name:" + name); 173 logger.info("contentTypeDefinitionId:" + contentTypeDefinitionId); 174 logger.info("repositoryId:" + repositoryId); 175 logger.info("parentContentId:" + parentContentId); 176 177 ContentVO contentVO = new ContentVO(); 178 contentVO.setName(name); 179 contentVO.setContentTypeDefinitionId(contentTypeDefinitionId); 180 contentVO.setRepositoryId(repositoryId); 181 contentVO.setParentContentId(parentContentId); 182 183 if(contentVO.getCreatorName() == null) 184 contentVO.setCreatorName(this.principal.getName()); 185 186 ContentVO newContentVO = contentControllerProxy.acCreate(this.principal, contentVO.getParentContentId(), contentVO.getContentTypeDefinitionId(), contentVO.getRepositoryId(), contentVO); 187 188 List contentVersions = (List )content.get("contentVersions"); 189 Iterator contentVersionIterator = contentVersions.iterator(); 190 while(contentVersionIterator.hasNext()) 191 { 192 Map contentVersion = (Map )contentVersionIterator.next(); 193 194 Integer languageId = (Integer )contentVersion.get("languageId"); 195 Integer stateId = (Integer )contentVersion.get("stateId"); 196 197 logger.info("languageId:" + languageId); 198 logger.info("stateId:" + stateId); 199 200 ContentVersionVO contentVersionVO = new ContentVersionVO(); 201 contentVersionVO.setLanguageId(languageId); 202 203 if(contentVersionVO.getVersionModifier() == null) 204 contentVersionVO.setVersionModifier(this.principal.getName()); 205 206 Map attributes = (Map )contentVersion.get("contentVersionAttributes"); 207 208 DOMBuilder domBuilder = new DOMBuilder(); 209 Document document = domBuilder.createDocument(); 210 211 Element rootElement = domBuilder.addElement(document, "root"); 212 domBuilder.addAttribute(rootElement, "xmlns", "x-schema:Schema.xml"); 213 Element attributesRoot = domBuilder.addElement(rootElement, "attributes"); 214 215 Iterator attributesIterator = attributes.keySet().iterator(); 216 while(attributesIterator.hasNext()) 217 { 218 String attributeName = (String )attributesIterator.next(); 219 String attributeValue = (String )attributes.get(attributeName); 220 221 Element attribute = domBuilder.addElement(attributesRoot, attributeName); 222 domBuilder.addCDATAElement(attribute, attributeValue); 223 } 224 225 contentVersionVO.setVersionValue(document.asXML()); 226 227 ContentVersionVO newContentVersionVO = contentVersionControllerProxy.acCreate(this.principal, newContentVO.getId(), languageId, contentVersionVO); 228 Integer newContentVersionId = newContentVersionVO.getId(); 229 230 List digitalAssets = (List )contentVersion.get("digitalAssets"); 231 232 logger.info("digitalAssets:" + digitalAssets); 233 if(digitalAssets != null) 234 { 235 Iterator digitalAssetIterator = digitalAssets.iterator(); 236 while(digitalAssetIterator.hasNext()) 237 { 238 RemoteAttachment remoteAttachment = (RemoteAttachment)digitalAssetIterator.next(); 239 logger.info("digitalAssets in ws:" + remoteAttachment); 240 241 DigitalAssetVO newAsset = new DigitalAssetVO(); 242 newAsset.setAssetContentType(remoteAttachment.getContentType()); 243 newAsset.setAssetKey(remoteAttachment.getName()); 244 newAsset.setAssetFileName(remoteAttachment.getFileName()); 245 newAsset.setAssetFilePath(remoteAttachment.getFilePath()); 246 newAsset.setAssetFileSize(new Integer (new Long (remoteAttachment.getBytes().length).intValue())); 247 InputStream is = new ByteArrayInputStream (remoteAttachment.getBytes()); 249 250 DigitalAssetController.create(newAsset, is, newContentVersionId); 251 } 252 } 253 254 if(stateId != null && !stateId.equals(ContentVersionVO.WORKING_STATE)) 256 { 257 List events = new ArrayList (); 258 ContentStateController.changeState(newContentVersionId, stateId, "Remote update from deliver", false, this.principal, newContentVO.getId(), events); 259 260 if(stateId.equals(ContentVersionVO.PUBLISHED_STATE)) 261 { 262 PublicationVO publicationVO = new PublicationVO(); 263 publicationVO.setName("Direct publication by " + this.principal.getName()); 264 publicationVO.setDescription("Direct publication from deliver"); 265 publicationVO.setRepositoryId(repositoryId); 266 publicationVO = PublicationController.getController().createAndPublish(publicationVO, events, false, this.principal); 267 } 268 269 } 270 } 271 272 newContentIdList.add(newContentVO.getId()); 273 274 } 275 logger.info("Done with contents.."); 276 277 } 278 catch(Throwable e) 279 { 280 logger.error("En error occurred when we tried to create a new content:" + e.getMessage(), e); 281 } 282 283 updateCaches(); 284 285 return new Boolean (true); 286 } 287 288 289 292 293 public Boolean updateContent(final String principalName, final Object [] inputsArray) 294 { 295 List newContentIdList = new ArrayList (); 296 297 logger.info("****************************************"); 298 logger.info("Updating content through webservice...."); 299 logger.info("****************************************"); 300 301 logger.info("principalName:" + principalName); 302 logger.info("inputsArray:" + inputsArray); 303 305 try 306 { 307 final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer(); 308 Map content = (Map ) serializer.deserialize(inputsArray); 309 logger.info("content:" + content); 310 311 initializePrincipal(principalName); 312 313 Integer contentId = (Integer )content.get("contentId"); 314 String name = (String )content.get("name"); 315 Date publishDateTime = (Date )content.get("publishDateTime"); 316 Date expireDateTime = (Date )content.get("expireDateTime"); 317 318 logger.info("contentId:" + contentId); 319 logger.info("name:" + name); 320 logger.info("publishDateTime:" + publishDateTime); 321 logger.info("expireDateTime:" + expireDateTime); 322 323 ContentVO contentVO = ContentController.getContentController().getContentVOWithId(contentId); 324 325 if(name != null) 326 contentVO.setName(name); 327 328 if(publishDateTime != null) 329 contentVO.setPublishDateTime(publishDateTime); 330 331 if(expireDateTime != null) 332 contentVO.setExpireDateTime(expireDateTime); 333 334 ContentVO newContentVO = contentControllerProxy.acUpdate(this.principal, contentVO, null); 335 336 logger.info("Done with contents.."); 337 338 } 339 catch(Throwable e) 340 { 341 logger.error("En error occurred when we tried to create a new content:" + e.getMessage(), e); 342 } 343 344 updateCaches(); 345 346 return new Boolean (true); 347 } 348 349 352 353 public Boolean updateContentVersion(final String principalName, final Object [] inputsArray) 354 { 355 List newContentIdList = new ArrayList (); 356 357 logger.info("****************************************"); 358 logger.info("Updating content versions through webservice...."); 359 logger.info("****************************************"); 360 361 logger.info("principalName:" + principalName); 362 logger.info("inputsArray:" + inputsArray); 363 365 try 366 { 367 final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer(); 368 Map contentVersion = (Map ) serializer.deserialize(inputsArray); 369 logger.info("contentVersion:" + contentVersion); 370 371 initializePrincipal(principalName); 372 373 Integer contentVersionId = (Integer )contentVersion.get("contentVersionId"); 374 Integer contentId = (Integer )contentVersion.get("contentId"); 375 Integer languageId = (Integer )contentVersion.get("languageId"); 376 Integer stateId = (Integer )contentVersion.get("stateId"); 377 String versionComment = (String )contentVersion.get("versionComment"); 378 379 logger.info("contentVersionId:" + contentVersionId); 380 logger.info("contentId:" + contentId); 381 logger.info("languageId:" + languageId); 382 logger.info("stateId:" + stateId); 383 logger.info("versionComment:" + versionComment); 384 385 ContentVersionVO contentVersionVO = null; 386 if(contentVersionId != null) 387 contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(contentVersionId); 388 else 389 contentVersionVO = ContentVersionController.getContentVersionController().getLatestActiveContentVersionVO(contentId, languageId); 390 391 if(contentVersionVO == null) 392 return new Boolean (false); 393 394 contentVersionVO.setVersionComment(versionComment); 395 396 Map attributes = (Map )contentVersion.get("contentVersionAttributes"); 397 398 if(attributes != null && attributes.size() > 0) 399 { 400 DOMBuilder domBuilder = new DOMBuilder(); 401 Document document = domBuilder.createDocument(); 402 403 Element rootElement = domBuilder.addElement(document, "root"); 404 domBuilder.addAttribute(rootElement, "xmlns", "x-schema:Schema.xml"); 405 Element attributesRoot = domBuilder.addElement(rootElement, "attributes"); 406 407 Iterator attributesIterator = attributes.keySet().iterator(); 408 while(attributesIterator.hasNext()) 409 { 410 String attributeName = (String )attributesIterator.next(); 411 String attributeValue = (String )attributes.get(attributeName); 412 413 Element attribute = domBuilder.addElement(attributesRoot, attributeName); 414 domBuilder.addCDATAElement(attribute, attributeValue); 415 } 416 417 contentVersionVO.setVersionValue(document.asXML()); 418 } 419 420 ContentVersionControllerProxy.getController().acUpdate(principal, contentId, languageId, contentVersionVO); 421 422 List digitalAssets = (List )contentVersion.get("digitalAssets"); 424 425 if(digitalAssets != null) 426 { 427 logger.info("digitalAssets:" + digitalAssets.size()); 428 429 Iterator digitalAssetIterator = digitalAssets.iterator(); 430 while(digitalAssetIterator.hasNext()) 431 { 432 RemoteAttachment remoteAttachment = (RemoteAttachment)digitalAssetIterator.next(); 433 logger.info("digitalAssets in ws:" + remoteAttachment); 434 435 DigitalAssetVO newAsset = new DigitalAssetVO(); 436 newAsset.setAssetContentType(remoteAttachment.getContentType()); 437 newAsset.setAssetKey(remoteAttachment.getName()); 438 newAsset.setAssetFileName(remoteAttachment.getFileName()); 439 newAsset.setAssetFilePath(remoteAttachment.getFilePath()); 440 newAsset.setAssetFileSize(new Integer (new Long (remoteAttachment.getBytes().length).intValue())); 441 InputStream is = new ByteArrayInputStream (remoteAttachment.getBytes()); 442 443 DigitalAssetController.create(newAsset, is, contentVersionVO.getContentVersionId()); 444 } 445 } 446 447 if(stateId != null && !stateId.equals(ContentVersionVO.WORKING_STATE)) 449 { 450 List events = new ArrayList (); 451 ContentStateController.changeState(contentVersionVO.getId(), stateId, "Remote update from deliver", false, this.principal, contentVersionVO.getContentId(), events); 452 453 if(stateId.equals(ContentVersionVO.PUBLISHED_STATE)) 454 { 455 PublicationVO publicationVO = new PublicationVO(); 456 publicationVO.setName("Direct publication by " + this.principal.getName()); 457 publicationVO.setDescription("Direct publication from deliver"); 458 ContentVO contentVO = ContentController.getContentController().getContentVOWithId(contentVersionVO.getContentId()); 459 publicationVO.setRepositoryId(contentVO.getRepositoryId()); 460 publicationVO = PublicationController.getController().createAndPublish(publicationVO, events, false, this.principal); 461 } 462 463 } 464 465 logger.info("Done with contentVersion.."); 466 467 } 468 catch(Throwable e) 469 { 470 logger.error("En error occurred when we tried to create a new content:" + e.getMessage(), e); 471 } 472 473 updateCaches(); 474 475 return new Boolean (true); 476 } 477 478 479 480 483 484 public Boolean deleteDigitalAsset(final String principalName, final Object [] inputsArray) 485 { 486 List newContentIdList = new ArrayList (); 487 488 logger.info("****************************************"); 489 logger.info("Updating content through webservice...."); 490 logger.info("****************************************"); 491 492 logger.info("principalName:" + principalName); 493 logger.info("inputsArray:" + inputsArray); 494 496 try 497 { 498 final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer(); 499 Map digitalAsset = (Map ) serializer.deserialize(inputsArray); 500 logger.info("digitalAsset:" + digitalAsset); 501 502 initializePrincipal(principalName); 503 504 Integer contentVersionId = (Integer )digitalAsset.get("contentVersionId"); 505 Integer contentId = (Integer )digitalAsset.get("contentId"); 506 Integer languageId = (Integer )digitalAsset.get("languageId"); 507 String assetKey = (String )digitalAsset.get("assetKey"); 508 509 logger.info("contentVersionId:" + contentVersionId); 510 logger.info("contentId:" + contentId); 511 logger.info("languageId:" + languageId); 512 logger.info("assetKey:" + assetKey); 513 514 ContentVersionController.getContentVersionController().deleteDigitalAsset(contentId, languageId, assetKey); 515 516 logger.info("Done with contents.."); 517 518 } 519 catch(Throwable e) 520 { 521 logger.error("En error occurred when we tried to delete a digitalAsset:" + e.getMessage(), e); 522 } 523 524 updateCaches(); 525 526 return new Boolean (true); 527 } 528 529 532 533 public Boolean deleteContent(final String principalName, final Object [] inputsArray) 534 { 535 List newContentIdList = new ArrayList (); 536 537 logger.info("****************************************"); 538 logger.info("Updating content through webservice...."); 539 logger.info("****************************************"); 540 541 logger.info("principalName:" + principalName); 542 logger.info("inputsArray:" + inputsArray); 543 545 try 546 { 547 final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer(); 548 Map digitalAsset = (Map ) serializer.deserialize(inputsArray); 549 logger.info("digitalAsset:" + digitalAsset); 550 551 initializePrincipal(principalName); 552 553 Integer contentId = (Integer )digitalAsset.get("contentId"); 554 555 logger.info("contentId:" + contentId); 556 557 ContentVO contentVO = new ContentVO(); 558 contentVO.setContentId(contentId); 559 560 ContentController.getContentController().delete(contentVO); 561 562 logger.info("Done with contents.."); 563 564 } 565 catch(Throwable e) 566 { 567 logger.error("En error occurred when we tried to delete a digitalAsset:" + e.getMessage(), e); 568 } 569 570 updateCaches(); 571 572 return new Boolean (true); 573 } 574 575 578 579 public Boolean deleteContentVersion(final String principalName, final Object [] inputsArray) 580 { 581 List newContentIdList = new ArrayList (); 582 583 logger.info("****************************************"); 584 logger.info("Updating content through webservice...."); 585 logger.info("****************************************"); 586 587 logger.info("principalName:" + principalName); 588 logger.info("inputsArray:" + inputsArray); 589 591 try 592 { 593 final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer(); 594 Map digitalAsset = (Map ) serializer.deserialize(inputsArray); 595 logger.info("digitalAsset:" + digitalAsset); 596 597 initializePrincipal(principalName); 598 599 Integer contentVersionId = (Integer )digitalAsset.get("contentVersionId"); 600 601 logger.info("contentVersionId:" + contentVersionId); 602 ContentVersionVO contentVersionVO = new ContentVersionVO(); 603 contentVersionVO.setContentVersionId(contentVersionId); 604 605 ContentVersionController.getContentVersionController().delete(contentVersionVO); 606 607 logger.info("Done with contents.."); 608 609 } 610 catch(Throwable e) 611 { 612 logger.error("En error occurred when we tried to delete a digitalAsset:" + e.getMessage(), e); 613 } 614 615 updateCaches(); 616 617 return new Boolean (true); 618 } 619 620 621 628 private void initializePrincipal(final String userName) throws SystemException 629 { 630 try 631 { 632 principal = UserControllerProxy.getController().getUser(userName); 633 } 634 catch(SystemException e) 635 { 636 throw e; 637 } 638 catch(Exception e) 639 { 640 throw new SystemException(e); 641 } 642 if(principal == null) 643 { 644 throw new SystemException("No such principal [" + userName + "]."); 645 } 646 } 647 648 649 } 650 | Popular Tags |