/*******************************************************************************
* 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.ide.spd.internal.ui.editor;
import gov.redhawk.ide.spd.internal.ui.editor.provider.ImplementationSectionImplementationItemProvider;
import gov.redhawk.ide.spd.internal.ui.editor.provider.ImplementationSectionSoftPkgItemProvider;
import gov.redhawk.ide.spd.internal.ui.editor.provider.SpdItemProviderAdapterFactoryAdapter;
import gov.redhawk.prf.ui.editor.page.PropertiesFormPage;
import gov.redhawk.prf.ui.provider.PropertiesEditorPrfItemProviderAdapterFactory;
import gov.redhawk.ui.editor.FormOutlinePage;
import gov.redhawk.ui.editor.SCAFormEditor;
import gov.redhawk.ui.editor.ScaFormPage;
import mil.jpeojtrs.sca.prf.Properties;
import mil.jpeojtrs.sca.scd.provider.ScdItemProviderAdapterFactory;
import mil.jpeojtrs.sca.spd.SoftPkg;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.ui.PlatformUI;
/**
*
*/
public class ComponentOutlinePage extends FormOutlinePage {
/**
* @since 2.0
*/
private class ComponentOutlinePageAdapterFactoryLabelProvider extends AdapterFactoryLabelProvider {
public ComponentOutlinePageAdapterFactoryLabelProvider(AdapterFactory adapterFactory) {
super(adapterFactory);
}
@Override
public String getText(Object object) {
if (object instanceof SoftPkg) {
return "Implementations";
} else if (object instanceof Properties) {
return "Properties";
} else if (object instanceof ScaFormPage) {
return "Overview";
}
return super.getText(AdapterFactoryEditingDomain.unwrap(object));
}
}
/**
* The Constructor.
*
* @param editor the editor
*/
public ComponentOutlinePage(final SCAFormEditor editor) {
super(editor);
super.setLabelProvider(new DecoratingLabelProvider(new ComponentOutlinePageAdapterFactoryLabelProvider(getAdapterFactory()), PlatformUI.getWorkbench()
.getDecoratorManager().getLabelDecorator()));
}
/**
* {@inheritDoc}
*/
@Override
protected void addItemProviders(final ComposedAdapterFactory adapterFactory) {
final SpdItemProviderAdapterFactoryAdapter provider = new SpdItemProviderAdapterFactoryAdapter();
provider.setSoftPkgAdapter(new ImplementationSectionSoftPkgItemProvider(provider));
provider.setImplementationAdapter(new ImplementationSectionImplementationItemProvider(provider, this.fEditor.getMainResource()));
adapterFactory.addAdapterFactory(provider);
adapterFactory.addAdapterFactory(new ScdItemProviderAdapterFactory());
adapterFactory.addAdapterFactory(new PropertiesEditorPrfItemProviderAdapterFactory());
}
/**
* {@inheritDoc}
*/
@Override
protected boolean getChildren(Object parent) {
// Defer to the content provider
return true;
}
/**
* {@inheritDoc}
*/
@Override
protected String getParentPageId(Object item) {
String pageId = getRootPageId(item);
if (pageId != null) {
return pageId;
}
return super.getParentPageId(item);
}
private String getRootPageId(Object item) {
Object target = AdapterFactoryEditingDomain.unwrap(item);
if (target instanceof SoftPkg) {
return ImplementationPage.PAGE_ID;
} else if (target instanceof Properties) {
return PropertiesFormPage.PAGE_ID;
} else if (target instanceof EObject) {
// Check the parent of the item
return getRootPageId(((EObject) target).eContainer());
} else {
return null;
}
}
}