001/* 002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * bstefanescu 011 */ 012package org.nuxeo.ecm.automation.core.operations; 013 014import java.io.IOException; 015 016import org.nuxeo.ecm.automation.OperationContext; 017import org.nuxeo.ecm.automation.OperationException; 018import org.nuxeo.ecm.automation.core.Constants; 019import org.nuxeo.ecm.automation.core.annotations.Context; 020import org.nuxeo.ecm.automation.core.annotations.Operation; 021import org.nuxeo.ecm.automation.core.annotations.OperationMethod; 022import org.nuxeo.ecm.automation.core.annotations.Param; 023import org.nuxeo.ecm.automation.core.scripting.Scripting.GroovyScript; 024import org.nuxeo.ecm.automation.core.scripting.Scripting.MvelScript; 025import org.nuxeo.ecm.core.api.Blob; 026import org.nuxeo.ecm.core.api.Blobs; 027import org.nuxeo.ecm.core.api.NuxeoPrincipal; 028 029/** 030 * Run a script given as the input of the operation (as a blob). Note that this operation is available only as 031 * administrator 032 * 033 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 034 */ 035@Operation(id = RunInputScript.ID, category = Constants.CAT_SCRIPTING, label = "Run Input Script", description = "Run a script from the input blob. A blob comtaining script result is returned.", aliases = { "Context.RunInputScript" }) 036public class RunInputScript { 037 038 public static final String ID = "RunInputScript"; 039 040 @Context 041 protected OperationContext ctx; 042 043 @Param(name = "type", required = false, values = { "mvel", "groovy" }, widget = Constants.W_OPTION) 044 protected String type = "mvel"; 045 046 @OperationMethod 047 public Blob run(Blob blob) throws OperationException, IOException { 048 if (!((NuxeoPrincipal) ctx.getPrincipal()).isAdministrator()) { 049 throw new OperationException("Not allowed. You must be administrator to run scripts"); 050 } 051 Object r = null; 052 if (type.equals("mvel")) { 053 r = MvelScript.compile(blob.getString()).eval(ctx); 054 } else if (type.equals("groovy")) { 055 r = new GroovyScript(blob.getString()).eval(ctx); 056 } else { 057 throw new OperationException("Unknown scripting language " + type); 058 } 059 if (r != null) { 060 Blob b = Blobs.createBlob(r.toString()); 061 b.setFilename("result"); 062 return b; 063 } 064 return null; 065 } 066 067}