/*******************************************************************************
* Copyright (c) 2016 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.windup.model.edit.domain;
import static org.jboss.tools.windup.model.domain.WindupConstants.SYNCH;
import java.util.List;
import javax.inject.Inject;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Display;
import org.jboss.tools.windup.model.domain.ModelService;
import org.jboss.tools.windup.windup.ConfigurationElement;
import org.jboss.tools.windup.windup.WindupModel;
import org.jboss.tools.windup.windup.WindupResult;
import org.jboss.windup.tooling.data.Hint;
import com.google.common.collect.Lists;
/**
* The content provider Windup's configuration element tree.
*/
public class ConfigurationElementTreeContentProvider extends AdapterFactoryContentProvider {
private boolean synched;
@Inject
public ConfigurationElementTreeContentProvider(ModelService modelService, AdapterFactory adapterFactory) {
super(adapterFactory);
adapterFactory.adapt(modelService.getModel(), IStructuredItemContentProvider.class);
}
@Inject
@Optional
private void synch(@UIEventTopic(SYNCH) Boolean synch) {
this.synched = synch;
viewer.refresh();
}
@Override
public Object[] getChildren(Object object) {
if (object instanceof ConfigurationElement) {
return getChildren((ConfigurationElement)object);
}
return new Object[0];
}
@Override
public Object[] getElements(Object object) {
if (object instanceof WindupModel) {
List<ConfigurationElement> configurations = ((WindupModel) object).getConfigurationElements();
return configurations.toArray(new Object[configurations.size()]);
}
return new Object[0];
}
@Override
public boolean hasChildren(Object object) {
if (!synched) {
return false;
}
if (object instanceof ConfigurationElement) {
return getChildren((ConfigurationElement)object).length > 0;
}
return false;
}
private Object[] getChildren(ConfigurationElement configuration) {
/*WindupResult windupResult = configuration.getWindupResult();
if (windupResult != null && windupResult.getExecutionResults() != null) {
List<Object> children = Lists.newArrayList();
children.add(windupResult);
for (Hint hint : windupResult.getExecutionResults().getHints()) {
IFile resource = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(hint.getFile().getAbsolutePath()));
IJavaElement element = JavaCore.create(resource);
IJavaElement parent = element.getParent();
}
return children.toArray(new Object[children.size()]);
}*/
return new Object[0];
}
@Override
public void notifyChanged(Notification notification) {
if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) {
Display.getDefault().asyncExec(() -> {
viewer.refresh();
((TreeViewer)viewer).expandAll();
});
}
}
}