Package com.springsource.insight.plugin.runexec

Source Code of com.springsource.insight.plugin.runexec.RunnableWrapper

/**
* Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.springsource.insight.plugin.runexec;

import java.util.TimerTask;

import org.aspectj.lang.JoinPoint;

import com.springsource.insight.collection.OperationCollectionUtil;
import com.springsource.insight.collection.OperationCollector;
import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.intercept.operation.OperationMap;
import com.springsource.insight.intercept.operation.SourceCodeLocation;

/**
*
*/
class RunnableWrapper extends TimerTask {
    private final Runnable runner;
    private final SourceCodeLocation rootLocation, spawnLocation;
    private final String rootLabel, runnerId;
    private OperationCollector operationCollector;

    public RunnableWrapper(OperationCollector collector,
                           Runnable runnable,
                           JoinPoint.StaticPart staticPart) {
        this(collector, runnable, OperationCollectionUtil.getSourceCodeLocation(staticPart));
    }

    public RunnableWrapper(OperationCollector collector,
                           Runnable runnable,
                           SourceCodeLocation forkLocation) {
        if ((operationCollector = collector) == null) {
            throw new IllegalStateException("No collector specified");
        }

        if ((runner = runnable) == null) {
            throw new IllegalStateException("No runner to wrap");
        }

        if ((spawnLocation = forkLocation) == null) {
            throw new IllegalStateException("No spawn location");
        }

        Class<?> runnerClass = RunExecDefinitions.resolveRunnerClass(runnable);
        runnerId = RunExecDefinitions.createRunnerId(runnable, runnerClass);
        rootLocation = new SourceCodeLocation(runnerClass.getName(), "run", (-1));
        rootLabel = rootLocation.getClassName() + "#" + rootLocation.getMethodName() + "()";
    }

    public OperationCollector getCollector() {
        return operationCollector;
    }

    public void setCollector(OperationCollector collector) {
        if ((operationCollector = collector) == null) {
            throw new IllegalStateException("No collector specified");
        }
    }

    public String getRunnerId() {
        return runnerId;
    }

    public Runnable getRunner() {
        return runner;
    }

    @Override
    public void run() {
        OperationCollector collector = getCollector();
        Operation op = createRootOperation(Thread.currentThread());
        collector.enter(op);
        try {
            Runnable command = getRunner();
            command.run();
            collector.exitNormal();
        } catch (RuntimeException e) {
            collector.exitAbnormal(e);
            throw e;
        }
    }

    Operation createRootOperation(Thread curThread) {
        Operation op = new Operation()
                .type(RunExecDefinitions.RUN_OP)
                .label(rootLabel)
                .sourceCodeLocation(rootLocation)
                .put(RunExecDefinitions.THREADNAME_ATTR, curThread.getName())
                .put(RunExecDefinitions.RUNNERID_ATTR, getRunnerId());
        setSpawnLocation(op);
        return op;
    }

    OperationMap setSpawnLocation(Operation op) {
        return RunExecDefinitions.setSpawnLocation(op, spawnLocation);
    }
}
TOP

Related Classes of com.springsource.insight.plugin.runexec.RunnableWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.