001/* 002 * (C) Copyright 2015 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Thierry Delprat <tdelprat@nuxeo.com> 018 * Stephane Lacoin <slacoin@nuxeo.com> 019 * Vladimir Pasquier <vpasquier@nuxeo.com> 020 */ 021package org.nuxeo.automation.scripting.internals; 022 023import javax.script.ScriptEngineManager; 024 025import org.apache.commons.logging.Log; 026import org.apache.commons.logging.LogFactory; 027import org.nuxeo.automation.scripting.api.AutomationScriptingConstants; 028import org.nuxeo.automation.scripting.api.AutomationScriptingService; 029import org.nuxeo.automation.scripting.internals.operation.ScriptingOperationDescriptor; 030import org.nuxeo.automation.scripting.internals.operation.ScriptingOperationTypeImpl; 031import org.nuxeo.ecm.automation.AutomationService; 032import org.nuxeo.ecm.automation.OperationException; 033import org.nuxeo.ecm.core.api.NuxeoException; 034import org.nuxeo.runtime.api.Framework; 035import org.nuxeo.runtime.management.metrics.MetricInvocationHandler; 036import org.nuxeo.runtime.model.ComponentContext; 037import org.nuxeo.runtime.model.ComponentInstance; 038import org.nuxeo.runtime.model.DefaultComponent; 039 040/** 041 * @since 7.2 042 */ 043public class AutomationScriptingComponent extends DefaultComponent { 044 045 private static final Log log = LogFactory.getLog(AutomationScriptingComponent.class); 046 047 protected ScriptingFactory scriptingFactory; 048 049 public AutomationScriptingService scriptingService = new AutomationScriptingServiceImpl(); 050 051 @Override 052 public void activate(ComponentContext context) { 053 super.activate(context); 054 scriptingFactory = new ScriptingFactory(); 055 scriptingFactory.install(); 056 if (Boolean.valueOf(Framework.getProperty(AutomationScriptingConstants.AUTOMATION_SCRIPTING_MONITOR, 057 Boolean.toString(log.isTraceEnabled())))) { 058 scriptingService = MetricInvocationHandler.newProxy(scriptingService, AutomationScriptingService.class); 059 } 060 } 061 062 @Override 063 public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { 064 if (AutomationScriptingConstants.XP_OPERATION.equals(extensionPoint)) { 065 AutomationService automationService = Framework.getLocalService(AutomationService.class); 066 ScriptingOperationDescriptor desc = (ScriptingOperationDescriptor) contribution; 067 ScriptingOperationTypeImpl type = new ScriptingOperationTypeImpl(automationService, desc); 068 try { 069 automationService.putOperation(type, true); 070 } catch (OperationException e) { 071 throw new NuxeoException(e); 072 } 073 } else { 074 log.error("Unknown extension point " + extensionPoint); 075 } 076 } 077 078 @Override 079 public void unregisterContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { 080 if (AutomationScriptingConstants.XP_OPERATION.equals(extensionPoint)) { 081 AutomationService automationService = Framework.getLocalService(AutomationService.class); 082 ScriptingOperationDescriptor desc = (ScriptingOperationDescriptor) contribution; 083 ScriptingOperationTypeImpl type = new ScriptingOperationTypeImpl(automationService, desc); 084 automationService.removeOperation(type); 085 } else { 086 log.error("Unknown extension point " + extensionPoint); 087 } 088 } 089 090 @Override 091 public void deactivate(ComponentContext context) { 092 super.deactivate(context); 093 } 094 095 @Override 096 public void applicationStarted(ComponentContext context) { 097 super.applicationStarted(context); 098 } 099 100 @Override 101 public <T> T getAdapter(Class<T> adapter) { 102 if (adapter.isAssignableFrom(AutomationScriptingService.class)) { 103 return adapter.cast(scriptingService); 104 } 105 if (adapter.isAssignableFrom(ScriptEngineManager.class)) { 106 return adapter.cast(scriptingFactory.scriptEngineManager); 107 } 108 return null; 109 } 110 111}