blob: 068a0419277789e343c2a1f99e9444cea4f2ed83 [file] [log] [blame]
/**
* Copyright (c) 2017 CEA.
* 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:
* CEA - initial API and implementation and/or initial documentation
*/
package org.eclipse.sensinact.studio.navigator.device;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.sensinact.studio.model.manager.modelupdater.ModelEditor;
import org.eclipse.sensinact.studio.model.manager.modelupdater.ModelUpdater;
import org.eclipse.sensinact.studio.navigator.device.filter.SensinactTreeViewer;
import org.eclipse.sensinact.studio.resource.Device;
import org.eclipse.sensinact.studio.resource.Gateway;
import org.eclipse.sensinact.studio.resource.Resource;
import org.eclipse.sensinact.studio.resource.Service;
import org.eclipse.sensinact.studio.resource.Studio;
import org.eclipse.sensinact.studio.resource.impl.DeviceImpl;
import org.eclipse.sensinact.studio.resource.impl.GatewayImpl;
/**
* @author Nicolas Hili, Etienne Gandrille
*
*/
public class DeviceNavigatorContentProvider implements ITreeContentProvider {
protected SensinactTreeViewer viewer;
public DeviceNavigatorContentProvider() {
}
/* (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)
*/
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.viewer=(SensinactTreeViewer)viewer;
this.viewer.setLabelProvider(new DeviceNavigatorLabelProvider());
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)
*/
@Override
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Studio) {
return ((Studio) parentElement).getGateways().toArray();
} else if (parentElement instanceof Gateway) {
return ((Gateway) parentElement).getDevice().toArray();
} else if (parentElement instanceof Device) {
try {
DeviceImpl device=(DeviceImpl)parentElement;
GatewayImpl gateway=(GatewayImpl)device.eContainer();
if(ModelEditor.getInstance().getServicesId(gateway.getName(),device.getName()).size()==0){
ModelUpdater.getInstance().updateServicesOnly(gateway.getName(),device.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
return ((Device) parentElement).getService().toArray();
} else if (parentElement instanceof Service) {
return ((Service) parentElement).getResource().toArray();
}
return new Object[0];
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
@Override
public Object getParent(Object element) {
return ((EObject) element).eContainer();
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
@Override
public boolean hasChildren(Object element) {
EObject eobject=(EObject)element;
if(element instanceof Device){
return true;
}else if(element instanceof Resource){
return false;
}
return eobject.eContents().size()>0;
}
}