/******************************************************************************* * Copyright (c) 2014 Wind River Systems, Inc. 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tcf.te.tcf.processes.core.services; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer; import org.eclipse.tcf.te.runtime.properties.PropertiesContainer; import org.eclipse.tcf.te.runtime.stepper.services.AbstractStepperOperationService; import org.eclipse.tcf.te.tcf.processes.core.interfaces.IProcessContextItem; import org.eclipse.tcf.te.tcf.processes.core.interfaces.IProcessesDataProperties; import org.eclipse.tcf.te.tcf.processes.core.interfaces.services.IStepGroupIds; import org.eclipse.tcf.te.tcf.processes.core.interfaces.services.IStepperServiceOperations; import org.eclipse.tcf.te.tcf.processes.core.util.ProcessDataHelper; /** * Processes stepper operation service implementation. */ public class StepperOperationService extends AbstractStepperOperationService { /** * Constructor. */ public StepperOperationService() { } /* (non-Javadoc) * @see org.eclipse.tcf.te.tcf.locator.services.StepperOperationService#isHandledOperation(java.lang.Object, java.lang.String) */ @Override public boolean isHandledOperation(Object context, String operation) { return IStepperServiceOperations.ATTACH.equals(operation) || IStepperServiceOperations.DETACH.equals(operation); } /* (non-Javadoc) * @see org.eclipse.tcf.te.tcf.locator.services.StepperOperationService#addToActionHistory(java.lang.Object, java.lang.String) */ @Override public boolean addToActionHistory(Object context, String operation) { return IStepperServiceOperations.ATTACH.equals(operation) || IStepperServiceOperations.DETACH.equals(operation); } /* (non-Javadoc) * @see org.eclipse.tcf.te.runtime.stepper.services.AbstractStepperOperationService#getSpecialHistoryData(java.lang.Object, java.lang.String, org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) */ @Override public IPropertiesContainer getSpecialHistoryData(Object context, String operation, IPropertiesContainer data) { String encoded = data.getStringProperty(IProcessesDataProperties.PROPERTY_CONTEXT_LIST); IProcessContextItem[] items = ProcessDataHelper.decodeProcessContextItems(encoded); for (IProcessContextItem item : items) { item.setProperty(IProcessContextItem.PROPERTY_ID, null); } IPropertiesContainer histData = new PropertiesContainer(); histData.setProperties(data.getProperties()); // sort the data Arrays.sort(items); // remove duplicate items List<IProcessContextItem> histItems = new ArrayList<IProcessContextItem>(); int i=0; while (i < items.length) { if (i == items.length-1) { histItems.add(items[i]); } else if (!items[i].equals(items[i+1])) { histItems.add(items[i]); } i++; } histData.setProperty(IProcessesDataProperties.PROPERTY_CONTEXT_LIST, ProcessDataHelper.encodeProcessContextItems(histItems.toArray(new IProcessContextItem[histItems.size()]))); return histData; } /* (non-Javadoc) * @see org.eclipse.tcf.te.tcf.locator.services.StepperOperationService#getStepGroupId(java.lang.Object, java.lang.String) */ @Override public String getStepGroupId(Object context, String operation) { if (IStepperServiceOperations.ATTACH.equals(operation)) { return IStepGroupIds.ATTACH; } if (IStepperServiceOperations.DETACH.equals(operation)) { return IStepGroupIds.DETACH; } return null; } /* (non-Javadoc) * @see org.eclipse.tcf.te.tcf.locator.services.StepperOperationService#getStepGroupName(java.lang.Object, java.lang.String) */ @Override public String getStepGroupName(Object context, String operation) { if (IStepperServiceOperations.ATTACH.equals(operation)) { return "Attach"; //$NON-NLS-1$ } if (IStepperServiceOperations.DETACH.equals(operation)) { return "Detach"; //$NON-NLS-1$ } return null; } /* (non-Javadoc) * @see org.eclipse.tcf.te.runtime.stepper.interfaces.IStepperOperationService#isEnabled(java.lang.Object, java.lang.String) */ @Override public boolean isEnabled(Object context, String operation) { return IStepperServiceOperations.ATTACH.equals(operation) || IStepperServiceOperations.DETACH.equals(operation); } /* (non-Javadoc) * @see org.eclipse.tcf.te.tcf.locator.services.StepperOperationService#isCancelable(java.lang.Object, java.lang.String) */ @Override public boolean isCancelable(Object context, String operation) { return IStepperServiceOperations.ATTACH.equals(operation) || IStepperServiceOperations.DETACH.equals(operation); } }