blob: db5d807395951eacbdb2dbeb52b50b6c07dc7e6b [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.layout.elements;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.epf.library.edit.TngAdapterFactory;
import org.eclipse.epf.library.layout.ElementLayoutManager;
import org.eclipse.epf.library.layout.IElementLayout;
import org.eclipse.epf.library.layout.util.XmlElement;
import org.eclipse.epf.library.util.LibraryUtil;
import org.eclipse.epf.uma.Activity;
import org.eclipse.epf.uma.MethodElement;
/**
* The element layout for a Role.
*
* @author Jinhua Xi
* @author Kelvin Low
* @since 1.0
*/
public class ProcessLayout extends AbstractElementLayout {
public ProcessLayout() {
super();
}
public void init(ElementLayoutManager layoutManager, MethodElement element) {
super.__init(layoutManager, element);
}
/**
* @see org.eclipse.epf.library.layout.IElementLayout#getXmlElement(boolean)
*/
public XmlElement getXmlElement(boolean includeReferences) {
XmlElement elementXml = super.getXmlElement();
if (!includeReferences) {
return elementXml;
}
// build the breakdown structure tree
XmlElement bs = elementXml
.newChild("breakdown").setAttribute("name", "Work Breakdown Structure"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
ComposedAdapterFactory adapterFactory = TngAdapterFactory.INSTANCE
.getWBS_ComposedAdapterFactory();
iterate(super.element, bs, adapterFactory);
bs = elementXml
.newChild("breakdown").setAttribute("name", "Team Breakdown Structure"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
adapterFactory = TngAdapterFactory.INSTANCE
.getOBS_ComposedAdapterFactory();
iterate(super.element, bs, adapterFactory);
bs = elementXml
.newChild("breakdown").setAttribute("name", "Work Product Breakdown Structure"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
adapterFactory = TngAdapterFactory.INSTANCE
.getPBS_ComposedAdapterFactory();
iterate(super.element, bs, adapterFactory);
return elementXml;
}
/**
* iterate the break down structure and build the xml document
*
* @param parentObj
* @param parentXml
* @param adapterFactory
*/
private void iterate(Object parentObj, XmlElement parentXml,
ComposedAdapterFactory adapterFactory) {
ITreeItemContentProvider provider = (ITreeItemContentProvider) adapterFactory
.adapt(parentObj, ITreeItemContentProvider.class);
// Either delegate the call or return nothing.
if (provider != null) {
Collection items = provider.getChildren(parentObj);
for (Iterator it = items.iterator(); it.hasNext();) {
MethodElement item = (MethodElement) LibraryUtil.unwrap(it
.next());
// super.processChild(parentXml, item, false);
IElementLayout l = layoutManager.getLayout(item, true);
if (l != null) {
XmlElement child = l.getXmlElement(false);
parentXml.addChild(child);
// ineterate children
if (item instanceof Activity) {
iterate(item, child, adapterFactory);
}
}
}
}
}
}