blob: 8edc230cdb95e55fb7ed8e39789d1b068b268f23 [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.authoring.ui.views;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.epf.library.configuration.ConfigurationClosure;
import org.eclipse.epf.library.configuration.ElementDependencyError;
import org.eclipse.epf.library.configuration.ErrorInfo;
import org.eclipse.epf.library.services.ElementReference;
import org.eclipse.epf.library.services.PackageDependency;
import org.eclipse.epf.library.services.PackageReference;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
/**
* The content provider for a Configuration error or warning message.
*
* @author Jinhua Xi
* @since 1.0
*/
public class MessageContentProvider implements ITreeContentProvider {
private ConfigurationClosure closure;
public MessageContentProvider(ConfigurationClosure closure) {
this.closure = closure;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
if (closure == null) {
return new Object[0];
}
if (inputElement instanceof ConfigurationClosure) {
return ((ConfigurationClosure) inputElement).getDependencyErrors();
} else if (inputElement instanceof ElementDependencyError) {
List errors = ((ElementDependencyError) inputElement).getAll();
if (errors != null) {
return errors.toArray();
}
return null;
} else if (inputElement instanceof ErrorInfo) {
ErrorInfo info = (ErrorInfo) inputElement;
int relation = info.getRelation();
MethodElement ownerElement = (MethodElement) info.getOwnerElement();
MethodElement causeElement = (MethodElement) info.getCauseElement();
PackageDependency dep;
PackageReference pkgRef = null;
if (relation == ErrorInfo.REFERENCE_TO) {
dep = closure.getConfigurationManager().getDependencyManager()
.getDependency(ownerElement);
pkgRef = dep.getReference(causeElement, false);
} else if (relation == ErrorInfo.REFERENCED_BY) {
dep = closure.getConfigurationManager().getDependencyManager()
.getDependency(causeElement);
pkgRef = dep.getReference(ownerElement, false);
}
if (pkgRef != null) {
List refErrors = new ArrayList();
for (Iterator it = pkgRef.getReferences().iterator(); it
.hasNext();) {
ElementReference ref = (ElementReference) it.next();
// Don't show the entry if the reference can be ignored.
if (ref.canIgnore()) {
continue;
}
ErrorInfo elementError;
if (relation == ErrorInfo.REFERENCE_TO) {
elementError = new ErrorInfo(
info.getErrorType(),
"", ref.getElement(), ref.getRefElement(), relation); //$NON-NLS-1$
} else {
elementError = new ErrorInfo(
info.getErrorType(),
"", ref.getRefElement(), ref.getElement(), relation); //$NON-NLS-1$
}
refErrors.add(elementError);
}
return refErrors.toArray();
}
}
return new Object[] {};
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object parentElement) {
return getElements(parentElement);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
public Object getParent(Object element) {
if (element instanceof ConfigurationClosure) {
return null;
} else if (element instanceof ErrorInfo) {
return this.closure;
} else {
return null;
}
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object element) {
if (element instanceof ConfigurationClosure) {
return true;
} else if (element instanceof ElementDependencyError) {
return ((ElementDependencyError) element).size() > 0;
} else if (element instanceof ErrorInfo) {
if (((ErrorInfo) element).getErrorMessage().length() > 0) {
return true;
}
}
return false;
}
}