/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.ui.attribute.adapter;
import java.util.StringTokenizer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.graphics.Image;
import org.jboss.tools.common.meta.XAttribute;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
public class CheckListAdapter extends DefaultValueAdapter {
public Image IMAGE_ENABLED = EclipseResourceUtil.getImage("images/common/check.gif"); //$NON-NLS-1$
public Image IMAGE_DISABLED = EclipseResourceUtil.getImage("images/common/uncheck.gif"); //$NON-NLS-1$
protected ILabelProvider labelProvider;
protected ITreeContentProvider treeContentProvider;
private STCPSpecialHelperSupportHandler provider;
private String[] tags = new String[]{"tag1", "tag2"};
public CheckListAdapter() {
labelProvider = new STCPTreeLabelProvider();
}
public void dispose() {
super.dispose();
if (treeContentProvider!=null) treeContentProvider.dispose();
treeContentProvider = null;
if (labelProvider!=null) labelProvider.dispose();
labelProvider = null;
if (provider!=null) provider.dispose();
provider = null;
}
public void setTags(String[] tags) {
if (provider==null || !(provider instanceof STCPSpecialHelperSupportHandler)) provider = new STCPSpecialHelperSupportHandler();
if(!differ(this.tags, tags)) return;
this.tags = tags;
if(provider.viewer != null) provider.viewer.refresh();
}
public void checkAll() {
StringBuffer sb = new StringBuffer();
char separator = getSeparator();
for (int i = 0; i < tags.length; i++) {
if(i > 0) sb.append(separator);
sb.append(tags[i]);
}
setValue(sb.toString());
}
public void setValue(Object value) {
super.setValue(value);
if (provider!=null && provider.viewer != null && !provider.viewer.getControl().isDisposed()) provider.viewer.refresh();
}
public String[] getTags() {
return tags;
}
private boolean differ(String[] s1, String[] s2) {
if(s1.length != s2.length) return true;
for (int i = 0; i < s1.length; i++) if(!s1[i].equals(s2[i])) return true;
return false;
}
protected ITreeContentProvider createTreeContentProvider(XAttribute attribute) {
return new DefaultXAttributeTreeContentProvider(attribute, model, modelObject);
}
public Object getAdapter(Class adapter) {
if (adapter == ILabelProvider.class) {
return labelProvider;
}
if (adapter == ITreeContentProvider.class) {
if (provider!=null) return provider;
if (treeContentProvider==null) {
treeContentProvider = createTreeContentProvider(attribute);
}
return treeContentProvider;
}
return super.getAdapter(adapter);
}
class STCPTreeLabelProvider extends LabelProvider {
/**
* Tree style SWT.CHECK is used instead.
public Image getImage(Object element) {
String s = getStringValue(true);
StringTokenizer st = new StringTokenizer(s, ";,");
while(st.hasMoreTokens()) {
if(st.nextToken().equals(element)) return IMAGE_ENABLED;
}
return IMAGE_DISABLED;
}
*/
}
class STCPSpecialHelperSupportHandler implements ITreeContentProvider {
Viewer viewer;
public Object[] getElements(Object inputElement) {
return tags;
}
public void dispose() {
viewer = null;
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.viewer = viewer;
if(viewer != null) viewer.refresh();
}
void ignore() {}
public Object[] getChildren(Object parentElement) {
return new Object[0];
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return false;
}
}
public char getSeparator() {
XAttribute a = getAttribute();
if(a == null && getAttributeData() != null) {
a = getAttributeData().getAttribute();
}
if(a != null) {
String s = a.getProperty("separator");
if("comma".equals(s)) return ',';
}
return ';';
}
}