/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.ui.viewsupport;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.xsd.XSDAttributeUse;
import org.eclipse.xsd.XSDParticle;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.workspace.ModelUtil;
import org.teiid.designer.ui.UiConstants;
/**
* StatusBarUpdater
*
* @since 8.0
*/
public class StatusBarUpdater
implements ISelectionChangedListener, UiConstants {
private IStatusLineManager statusLineManager;
/**
* Construct an instance of StatusBarUpdater.
*
*/
public StatusBarUpdater(IStatusLineManager statusLineManager) {
this.statusLineManager= statusLineManager;
}
/*
* @see ISelectionChangedListener#selectionChanged
*/
@Override
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = event.getSelection();
String statusBarMessage= formatMessage(selection);
statusLineManager.setMessage(statusBarMessage);
}
protected String formatMessage(ISelection sel) {
if (sel instanceof IStructuredSelection && !sel.isEmpty()) {
IStructuredSelection selection= (IStructuredSelection) sel;
int nElements= selection.size();
if (nElements > 1) {
return Util.getString("StatusBarUpdater.num_elements_selected", String.valueOf(nElements)); //$NON-NLS-1$
}
Object elem= selection.getFirstElement();
if (elem instanceof EObject) {
return formatEObjectMessage((EObject) elem);
} else if (elem instanceof IResource) {
return formatResourceMessage((IResource) elem);
} else if (elem instanceof ImportContainer) {
return ((ImportContainer)elem).toString();
} else if(elem instanceof IExtendedModelObject ) {
return ((IExtendedModelObject)elem).getStatusLabel();
} else {
return elem.getClass().getName();
}
}
return ""; //$NON-NLS-1$
}
public static String formatEObjectMessage(EObject element) {
String result;
if ( element instanceof ENamedElement ) {
result = element.eClass().getName();
result += ": " + ((ENamedElement) element).getName(); //$NON-NLS-1$
} else {
if (element instanceof XSDParticle) {
result = ((XSDParticle)element).getTerm().eClass().getName();
} else if (element instanceof XSDAttributeUse) {
result = ((XSDAttributeUse)element).getAttributeDeclaration().eClass().getName();
} else {
result = element.eClass().getName();
}
result += ": "; //$NON-NLS-1$
result += ModelerCore.getModelEditor().getModelRelativePathIncludingModel(element);
}
return result;
}
private String formatResourceMessage(IResource element) {
IContainer parent= element.getParent();
if (parent != null && parent.getType() != IResource.ROOT) {
try {
return ModelUtil.getLocation(element).toString();
} catch (CoreException ex) {
UiConstants.Util.log(ex);
return ex.getLocalizedMessage();
}
}
return element.getName() + Util.getString("StatusBarUpdater._class____4") + element.getClass().getName(); //$NON-NLS-1$
}
}