/******************************************************************************* * Copyright (c) 2012 BundleMaker Project Team * 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: * Nils Hartmann - initial API and implementation ******************************************************************************/ package org.bundlemaker.core.ui.view.transformationhistory.view; import java.util.List; import org.bundlemaker.core.analysis.IAnalysisModelModifiedListener; import org.bundlemaker.core.analysis.IRootArtifact; import org.bundlemaker.core.resource.IModularizedSystem; import org.bundlemaker.core.resource.ITransformation; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Display; /** * @author Nils Hartmann (nils@nilshartmann.net) * */ public class HistoryViewContentProvider implements ITreeContentProvider { private final RefreshViewerAnalysisModelModifiedListener _refreshViewerAnalysisModelModifiedListener = new RefreshViewerAnalysisModelModifiedListener(); private Viewer _viewer; private final String[] NO_TRANSFORMATION_HAS_BEEN_RUN = new String[] { "No transformation has been run yet" }; /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override public void dispose() { } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, * java.lang.Object) */ @SuppressWarnings("unchecked") @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { _viewer = viewer; if (oldInput != null) { List<IRootArtifact> oldRoots = (List<IRootArtifact>) oldInput; for (IRootArtifact iRootArtifact : oldRoots) { iRootArtifact.removeAnalysisModelModifiedListener(_refreshViewerAnalysisModelModifiedListener); } } if (newInput != null) { List<IRootArtifact> newRoots = (List<IRootArtifact>) newInput; for (IRootArtifact iRootArtifact : newRoots) { iRootArtifact.addAnalysisModelModifiedListener(_refreshViewerAnalysisModelModifiedListener); } } } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object) */ @Override public Object[] getElements(Object inputElement) { List<IRootArtifact> systems = (List<IRootArtifact>) inputElement; return systems.toArray(new IRootArtifact[0]); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */ @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof IRootArtifact) { IRootArtifact rootArtifact = (IRootArtifact) parentElement; IModularizedSystem modularizedSystem = rootArtifact.getModularizedSystem(); ITransformation[] transformations = modularizedSystem.getTransformations().toArray(new ITransformation[0]); if (transformations.length == 0) { return NO_TRANSFORMATION_HAS_BEEN_RUN; } return transformations; } System.out.println("Hae??? " + parentElement); return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) */ @Override public Object getParent(Object element) { if (element instanceof ITransformation) { ITransformation transformation = (ITransformation) element; } return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) */ @Override public boolean hasChildren(Object element) { return element instanceof IRootArtifact; } class RefreshViewerAnalysisModelModifiedListener implements IAnalysisModelModifiedListener { /* * (non-Javadoc) * * @see org.bundlemaker.core.analysis.IAnalysisModelModifiedListener#analysisModelModified() */ @Override public void analysisModelModified() { // async refresh Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if (_viewer != null && !_viewer.getControl().isDisposed()) { _viewer.refresh(); } } }); } } }