/* * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * bstefanescu */ package org.eclipse.ecr.automation.core; import org.eclipse.ecr.automation.AutomationService; import org.eclipse.ecr.automation.core.events.EventHandler; import org.eclipse.ecr.automation.core.events.EventHandlerRegistry; import org.eclipse.ecr.automation.core.events.operations.FireEvent; import org.eclipse.ecr.automation.core.impl.OperationServiceImpl; import org.eclipse.ecr.automation.core.operations.FetchContextDocument; import org.eclipse.ecr.automation.core.operations.RestoreBlobInput; import org.eclipse.ecr.automation.core.operations.RestoreBlobsInput; import org.eclipse.ecr.automation.core.operations.RestoreDocumentInput; import org.eclipse.ecr.automation.core.operations.RestoreDocumentsInput; import org.eclipse.ecr.automation.core.operations.RunInputScript; import org.eclipse.ecr.automation.core.operations.RunScript; import org.eclipse.ecr.automation.core.operations.SetInputAsVar; import org.eclipse.ecr.automation.core.operations.SetVar; import org.eclipse.ecr.automation.core.operations.blob.AttachBlob; import org.eclipse.ecr.automation.core.operations.blob.BlobToFile; import org.eclipse.ecr.automation.core.operations.blob.BlobToPDF; import org.eclipse.ecr.automation.core.operations.blob.CreateBlob; import org.eclipse.ecr.automation.core.operations.blob.CreateZip; import org.eclipse.ecr.automation.core.operations.blob.GetDocumentBlob; import org.eclipse.ecr.automation.core.operations.blob.GetDocumentBlobs; import org.eclipse.ecr.automation.core.operations.blob.PostBlob; import org.eclipse.ecr.automation.core.operations.blob.SetBlobFileName; import org.eclipse.ecr.automation.core.operations.document.CheckInDocument; import org.eclipse.ecr.automation.core.operations.document.CheckOutDocument; import org.eclipse.ecr.automation.core.operations.document.CopyDocument; import org.eclipse.ecr.automation.core.operations.document.CreateDocument; import org.eclipse.ecr.automation.core.operations.document.CreateVersion; import org.eclipse.ecr.automation.core.operations.document.DeleteDocument; import org.eclipse.ecr.automation.core.operations.document.FetchByProperty; import org.eclipse.ecr.automation.core.operations.document.FetchDocument; import org.eclipse.ecr.automation.core.operations.document.FilterDocuments; import org.eclipse.ecr.automation.core.operations.document.GetDocumentChild; import org.eclipse.ecr.automation.core.operations.document.GetDocumentChildren; import org.eclipse.ecr.automation.core.operations.document.GetDocumentParent; import org.eclipse.ecr.automation.core.operations.document.LockDocument; import org.eclipse.ecr.automation.core.operations.document.MoveDocument; import org.eclipse.ecr.automation.core.operations.document.MultiPublishDocument; import org.eclipse.ecr.automation.core.operations.document.PublishDocument; import org.eclipse.ecr.automation.core.operations.document.Query; import org.eclipse.ecr.automation.core.operations.document.ReloadDocument; import org.eclipse.ecr.automation.core.operations.document.RemoveDocumentACL; import org.eclipse.ecr.automation.core.operations.document.RemoveDocumentBlob; import org.eclipse.ecr.automation.core.operations.document.RemoveProperty; import org.eclipse.ecr.automation.core.operations.document.SaveDocument; import org.eclipse.ecr.automation.core.operations.document.SetDocumentACE; import org.eclipse.ecr.automation.core.operations.document.SetDocumentBlob; import org.eclipse.ecr.automation.core.operations.document.SetDocumentLifeCycle; import org.eclipse.ecr.automation.core.operations.document.SetDocumentProperty; import org.eclipse.ecr.automation.core.operations.document.UnlockDocument; import org.eclipse.ecr.automation.core.operations.document.UpdateDocument; import org.eclipse.ecr.automation.core.operations.execution.RunDocumentChain; import org.eclipse.ecr.automation.core.operations.execution.RunOperation; import org.eclipse.ecr.automation.core.operations.execution.SaveSession; import org.eclipse.ecr.automation.core.operations.login.LoginAs; import org.eclipse.ecr.automation.core.operations.login.Logout; import org.eclipse.ecr.automation.core.operations.stack.PopBlob; import org.eclipse.ecr.automation.core.operations.stack.PopBlobList; import org.eclipse.ecr.automation.core.operations.stack.PopDocument; import org.eclipse.ecr.automation.core.operations.stack.PopDocumentList; import org.eclipse.ecr.automation.core.operations.stack.PullBlob; import org.eclipse.ecr.automation.core.operations.stack.PullBlobList; import org.eclipse.ecr.automation.core.operations.stack.PullDocument; import org.eclipse.ecr.automation.core.operations.stack.PullDocumentList; import org.eclipse.ecr.automation.core.operations.stack.PushBlob; import org.eclipse.ecr.automation.core.operations.stack.PushBlobList; import org.eclipse.ecr.automation.core.operations.stack.PushDocument; import org.eclipse.ecr.automation.core.operations.stack.PushDocumentList; import org.eclipse.ecr.automation.core.rendering.operations.RenderDocument; import org.eclipse.ecr.automation.core.rendering.operations.RenderDocumentFeed; import org.eclipse.ecr.runtime.model.ComponentContext; import org.eclipse.ecr.runtime.model.ComponentInstance; import org.eclipse.ecr.runtime.model.DefaultComponent; /** * Nuxeo component that provide an implementation of the * {@link AutomationService} and handle extensions registrations. * * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> */ public class AutomationComponent extends DefaultComponent { public static final String XP_OPERATIONS = "operations"; public static final String XP_ADAPTERS = "adapters"; public static final String XP_CHAINS = "chains"; public static final String XP_EVENT_HANDLERS = "event-handlers"; protected AutomationService service; protected EventHandlerRegistry handlers; @Override public void activate(ComponentContext context) throws Exception { service = new OperationServiceImpl(); // register built-in operations service.putOperation(FetchContextDocument.class); service.putOperation(SetVar.class); service.putOperation(PushDocument.class); service.putOperation(PushDocumentList.class); service.putOperation(PopDocument.class); service.putOperation(PopDocumentList.class); service.putOperation(SetInputAsVar.class); service.putOperation(RestoreDocumentInput.class); service.putOperation(RestoreDocumentsInput.class); service.putOperation(RestoreBlobInput.class); service.putOperation(RestoreBlobsInput.class); service.putOperation(RunScript.class); service.putOperation(RunOperation.class); service.putOperation(RunDocumentChain.class); service.putOperation(CopyDocument.class); service.putOperation(CreateDocument.class); service.putOperation(CreateVersion.class); service.putOperation(CheckInDocument.class); service.putOperation(CheckOutDocument.class); service.putOperation(DeleteDocument.class); service.putOperation(FetchDocument.class); service.putOperation(LockDocument.class); service.putOperation(Query.class); service.putOperation(FetchByProperty.class); service.putOperation(FilterDocuments.class); service.putOperation(UnlockDocument.class); service.putOperation(GetDocumentChildren.class); service.putOperation(GetDocumentChild.class); service.putOperation(GetDocumentParent.class); service.putOperation(MoveDocument.class); service.putOperation(ReloadDocument.class); service.putOperation(SaveDocument.class); service.putOperation(SaveSession.class); service.putOperation(SetDocumentLifeCycle.class); service.putOperation(SetDocumentACE.class); service.putOperation(RemoveDocumentACL.class); service.putOperation(SetDocumentProperty.class); service.putOperation(RemoveProperty.class); service.putOperation(UpdateDocument.class); service.putOperation(PublishDocument.class); service.putOperation(MultiPublishDocument.class); service.putOperation(GetDocumentBlob.class); service.putOperation(GetDocumentBlobs.class); service.putOperation(SetDocumentBlob.class); service.putOperation(PostBlob.class); service.putOperation(BlobToPDF.class); service.putOperation(BlobToFile.class); service.putOperation(CreateBlob.class); service.putOperation(CreateZip.class); service.putOperation(AttachBlob.class); service.putOperation(SetBlobFileName.class); service.putOperation(RemoveDocumentBlob.class); service.putOperation(PushBlob.class); service.putOperation(PushBlobList.class); service.putOperation(PopBlob.class); service.putOperation(PopBlobList.class); service.putOperation(PullDocument.class); service.putOperation(PullDocumentList.class); service.putOperation(PullBlob.class); service.putOperation(PullBlobList.class); service.putOperation(FireEvent.class); service.putOperation(RunInputScript.class); service.putOperation(RenderDocument.class); service.putOperation(RenderDocumentFeed.class); service.putOperation(LoginAs.class); service.putOperation(Logout.class); // disabled operations // service.putOperation(RunScriptFile.class); handlers = new EventHandlerRegistry(service); } @Override public void deactivate(ComponentContext context) throws Exception { service = null; handlers = null; } @Override public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) throws Exception { if (XP_OPERATIONS.equals(extensionPoint)) { OperationContribution opc = (OperationContribution) contribution; service.putOperation(opc.type, opc.replace); } else if (XP_CHAINS.equals(extensionPoint)) { OperationChainContribution occ = (OperationChainContribution) contribution; service.putOperationChain( occ.toOperationChain(contributor.getContext().getBundle()), occ.replace); } else if (XP_ADAPTERS.equals(extensionPoint)) { TypeAdapterContribution tac = (TypeAdapterContribution) contribution; service.putTypeAdapter(tac.accept, tac.produce, tac.clazz.newInstance()); } else if (XP_EVENT_HANDLERS.equals(extensionPoint)) { EventHandler eh = (EventHandler) contribution; if (eh.isPostCommit()) { handlers.putPostCommitEventHandler(eh); } else { handlers.putEventHandler(eh); } } } @Override public void unregisterContribution(Object contribution, String extensionPoint, ComponentInstance contributor) throws Exception { if (XP_OPERATIONS.equals(extensionPoint)) { service.removeOperation(((OperationContribution) contribution).type); } else if (XP_CHAINS.equals(extensionPoint)) { OperationChainContribution occ = (OperationChainContribution) contribution; service.removeOperationChain(occ.id); } else if (XP_ADAPTERS.equals(extensionPoint)) { TypeAdapterContribution tac = (TypeAdapterContribution) contribution; service.removeTypeAdapter(tac.accept, tac.produce); } else if (XP_EVENT_HANDLERS.equals(extensionPoint)) { EventHandler eh = (EventHandler) contribution; if (eh.isPostCommit()) { handlers.removePostCommitEventHandler(eh); } else { handlers.removeEventHandler(eh); } } } @Override public <T> T getAdapter(Class<T> adapter) { if (adapter == AutomationService.class) { return adapter.cast(service); } if (adapter == EventHandlerRegistry.class) { return adapter.cast(handlers); } return null; } }