/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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.
*
*/
package gov.redhawk.sca.sad.diagram.adapters;
import gov.redhawk.model.sca.ScaComponent;
import gov.redhawk.model.sca.ScaModelPlugin;
import gov.redhawk.model.sca.ScaPort;
import gov.redhawk.model.sca.ScaUsesPort;
import gov.redhawk.model.sca.ScaWaveform;
import java.util.Map;
import mil.jpeojtrs.sca.partitioning.UsesPortStub;
import mil.jpeojtrs.sca.sad.SadComponentInstantiation;
import mil.jpeojtrs.sca.sad.diagram.edit.parts.UsesPortStubEditPart;
import mil.jpeojtrs.sca.util.QueryParser;
import mil.jpeojtrs.sca.util.ScaFileSystemConstants;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.emf.common.util.URI;
public class UsesPortStubAdapterFactory implements IAdapterFactory {
private static final Class< ? >[] LIST = new Class< ? >[] {
ScaUsesPort.class, ScaPort.class
};
@Override
public Object getAdapter(final Object adaptableObject, @SuppressWarnings("rawtypes") final Class adapterType) {
if (adaptableObject instanceof UsesPortStubEditPart) {
final UsesPortStubEditPart editPart = (UsesPortStubEditPart) adaptableObject;
final UsesPortStub uses = (UsesPortStub) editPart.getAdapter(UsesPortStub.class);
if (uses == null || uses.eResource() == null || !(uses.eContainer() instanceof SadComponentInstantiation)) {
return null;
}
if (ScaPort.class.isAssignableFrom(adapterType)) {
final URI uri = uses.eResource().getURI();
final Map<String, String> query = QueryParser.parseQuery(uri.query());
final String wfRef = query.get(ScaFileSystemConstants.QUERY_PARAM_WF);
final ScaWaveform waveform = ScaModelPlugin.getDefault().findEObject(ScaWaveform.class, wfRef);
final String myId = ((SadComponentInstantiation) uses.eContainer()).getId();
for (final ScaComponent component : AdapterUtil.safeFetchComponents(waveform)) {
final String scaComponentId = component.identifier();
if (scaComponentId.startsWith(myId)) {
for (final ScaPort< ? , ? > port : AdapterUtil.safeFetchPorts(component)) {
if (port != null && (port instanceof ScaUsesPort)) {
final String name = port.getName();
if (name != null && name.equals(uses.getName())) {
return port;
}
}
}
}
}
}
}
return null;
}
@Override
public Class< ? >[] getAdapterList() {
return UsesPortStubAdapterFactory.LIST;
}
}