Project

General

Profile

« Previous | Next » 

Revision e717eb17

Added by Cherian Mathew almost 11 years ago

TermLabelProvider : added styling to distinguish between vocabularies and terms
DefinedTermMenuFactory : Factory to dynamically build recursive menu for defined term editor
DefinedTermEditor : mainly clean up of code

View differences:

.gitattributes
1073 1073
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermDragListener.java -text
1074 1074
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermDropAdapter.java -text
1075 1075
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java -text
1076
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java -text
1076 1077
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermBasePropertyTester.java -text
1077 1078
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermContentProvider.java -text
1078 1079
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermLabelProvider.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java
41 41
import eu.etaxonomy.cdm.api.service.IVocabularyService;
42 42
import eu.etaxonomy.cdm.model.common.CdmBase;
43 43
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
44
import eu.etaxonomy.cdm.model.common.TermType;
44 45
import eu.etaxonomy.cdm.model.common.TermVocabulary;
45 46
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
46 47
import eu.etaxonomy.taxeditor.editor.definedterm.input.AbstractDefinedTermEditorInput;
48
import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;
47 49
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
48 50
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
49 51
import eu.etaxonomy.taxeditor.store.CdmStore;
......
64 66
	protected ConversationHolder conversation;
65 67
	private ISelectionService selectionService;
66 68
	private boolean dirty;
67
	Set<TermVocabulary<? extends DefinedTermBase>> inMemoryVocabularies = new HashSet<TermVocabulary<? extends DefinedTermBase>>();
69

  
70

  
68 71

  
69 72
	private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
70 73
	/**
......
95 98
			Transfer[] transfers = new Transfer[] { TermTransfer.getInstance() };
96 99
			viewer.addDragSupport(dndOperations, transfers, new DefinedTermDragListener(viewer));
97 100
			viewer.addDropSupport(dndOperations, transfers, new DefinedTermDropAdapter(this));
98

  
99
					
100
			initialiseVocabularies();		
101
			viewer.setInput(inMemoryVocabularies);
101
									
102
			getDefinedTermEditorInput().initialiseVocabularies();
103
			viewer.setInput(getDefinedTermEditorInput().getVocabularies());
102 104
						
103 105
			getSite().setSelectionProvider(viewer);
104 106
			
......
110 112
		}
111 113
	
112 114
	
113
	protected void initialiseVocabularies() {
114
		inMemoryVocabularies.clear();
115
		//List<TermVocabulary> vocabularies = CdmStore.getService(IVocabularyService.class).list(null, null, null, null, null);
116 115

  
117
//		for (TermVocabulary vocabulary : vocabularies){
118
//			if(vocabulary.getTerms().isEmpty()){
119
//				inMemoryVocabularies.add(vocabulary);
120
//			}
121
//		}
122

  
123
		
124
		List<TermVocabulary<? extends DefinedTermBase>> termVocabularies = CdmStore.getService(IVocabularyService.class).listByTermClass(getDefinedTermEditorInput().getTermClass(), true, true, null, null, null, null);
125
		
126
		
127
		inMemoryVocabularies.addAll(termVocabularies);
128
	}
129 116
	
130 117
	/**
131 118
	 * 
132 119
	 */
133
	public AbstractDefinedTermEditorInput getDefinedTermEditorInput() {
134
		return (AbstractDefinedTermEditorInput) getEditorInput();
120
	public TermEditorInput getDefinedTermEditorInput() {
121
		return (TermEditorInput) getEditorInput();
135 122
	}
136 123

  
137 124
	/* (non-Javadoc)
......
139 126
	 */
140 127
	@Override
141 128
	public boolean postOperation(CdmBase objectAffectedByOperation) {
142

  
143
		if(objectAffectedByOperation instanceof DefinedTermBase){
144
			viewer.refresh();
145
		} else if (objectAffectedByOperation instanceof TermVocabulary){
146
//			if (inMemoryVocabularies.contains(objectAffectedByOperation)){
147
//				inMemoryVocabularies.remove((TermVocabulary) objectAffectedByOperation);
148
//			}else{
149
//				inMemoryVocabularies.add((TermVocabulary) objectAffectedByOperation);
150
//				DetailsViewPart view = (DetailsViewPart) StoreUtil.getView(DetailsViewPart.ID, true);
151
//				view.setFocus();
152
//			}
153 129
			
154
//			viewer.setInput(inMemoryVocabularies);
155
			viewer.refresh();
156
			
157
		}
158
		
159 130
		
131
		viewer.refresh();		
160 132
		
161 133
		if(objectAffectedByOperation != null){
162 134
			viewer.setSelection(new StructuredSelection(objectAffectedByOperation));
......
185 157
	public void doSave(IProgressMonitor monitor) {
186 158
		getConversationHolder().commit();
187 159
		setDirty(false);
188
		initialiseVocabularies();
160
		getDefinedTermEditorInput().initialiseVocabularies();
189 161
	}
190 162
	
191 163

  
......
259 231
		return viewer;
260 232
	}
261 233

  
262
	/**
263
	 * @return 
264
	 * 
265
	 */
266
	public Set<TermVocabulary<? extends DefinedTermBase>> getInMemoryVocabularies() {
267
		return inMemoryVocabularies;
268
	}
234

  
269 235

  
270 236
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java
1
// $Id$
2
/**
3
* Copyright (C) 2009 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

  
11
package eu.etaxonomy.taxeditor.editor.definedterm;
12

  
13
import java.util.EnumSet;
14
import java.util.HashMap;
15
import java.util.Map;
16
import java.util.Set;
17

  
18
import org.eclipse.jface.action.IContributionItem;
19
import org.eclipse.jface.action.MenuManager;
20
import org.eclipse.swt.SWT;
21
import org.eclipse.ui.menus.CommandContributionItem;
22
import org.eclipse.ui.menus.CommandContributionItemParameter;
23
import org.eclipse.ui.menus.ExtensionContributionFactory;
24
import org.eclipse.ui.menus.IContributionRoot;
25
import org.eclipse.ui.services.IServiceLocator;
26

  
27
import eu.etaxonomy.cdm.model.common.TermType;
28

  
29
/**
30
 * Menu factory used in the store plugin xml to dynamically generate menu (sub-menu) contribution items
31
 * for term types which when clicked open the defined term editor for the chosen term type
32
 * 
33
 * @author c.mathew
34
 * @date 18 Jul 2013
35
 *
36
 */
37

  
38
public class DefinedTermMenuFactory extends ExtensionContributionFactory {	
39
	
40
	@Override
41
	public void createContributionItems(IServiceLocator serviceLocator,
42
			IContributionRoot additions) {
43
		
44
		MenuManager dtMenuManager = 
45
				new MenuManager("Term Editor","eu.etaxonomy.taxeditor.store.definedTermEditorMenu"); 
46
		
47
		dtMenuManager.setVisible(true);
48
        
49
		additions.addContributionItem(dtMenuManager, null);
50
		
51
        for (TermType tt : EnumSet.allOf(TermType.class))
52
        {
53
        	// if term type has a parent, do not add it
54
        	// it will be added in the recursive call
55
        	if(tt.getKindOf() == null) {
56
        		IContributionItem ici = addChildTermsToMenuManager(tt, serviceLocator);
57
        		
58
        		if(ici != null) {
59
        			System.out.println("Adding : " + tt.getMessage()); 	        		
60
        			dtMenuManager.add(ici);
61
        		}
62
        	}
63
        }				       
64
	}
65
	
66
	private IContributionItem addChildTermsToMenuManager(TermType termType, IServiceLocator serviceLocator) {
67
	
68
		Set<TermType> children = termType.getGeneralizationOf();
69
		// term type has no children, so create menu item
70
		if(children.isEmpty()) {
71
			System.out.println("No children for : " + termType.getMessage());
72
			return createMenuItem(termType, serviceLocator);
73
		}
74
		// term type has children, so create sub menu
75
		System.out.println("Children for : " + termType.getMessage());
76
		MenuManager dtMenuManager = 
77
				new MenuManager(termType.getMessage(),"eu.etaxonomy.taxeditor.store." + termType.getKey() + "Menu"); 
78
		dtMenuManager.setVisible(true);
79
		dtMenuManager.add(createDefaultMenuItem(termType, serviceLocator));
80
		// add child items to the sub menu
81
		for(TermType tt : children) {
82
			System.out.println("Child : " + tt.getMessage());
83
			IContributionItem item = addChildTermsToMenuManager(tt,serviceLocator);
84
			if(item != null) {
85
				System.out.println("Adding : " + tt.getMessage() + " to "  + termType.getMessage());
86
				dtMenuManager.add(item);
87
			}					
88
		}		
89
		return dtMenuManager;
90
		
91
	}
92
	
93
	private CommandContributionItem createMenuItem(TermType termType, IServiceLocator serviceLocator) {
94
		
95
		Map<String, String> params = new HashMap<String, String>();
96
		params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
97
				termType.getUuid().toString());
98
		System.out.println("Term Type UUID : " + termType.getUuid().toString());
99
		
100
        CommandContributionItemParameter p = new CommandContributionItemParameter(
101
                serviceLocator, 
102
                "",
103
                "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
104
                params,
105
                null,
106
                null,
107
                null,
108
                termType.getMessage(),
109
                "",
110
                "",                
111
                SWT.PUSH,
112
                "",
113
                true);
114
   
115
        CommandContributionItem item = new CommandContributionItem(p);   
116
        return item;
117
		
118
	}
119
	
120
	private CommandContributionItem createDefaultMenuItem(TermType termType, IServiceLocator serviceLocator) {
121
		
122
		Map<String, String> params = new HashMap<String, String>();
123
		params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
124
				termType.getUuid().toString());
125
		System.out.println("Term Type UUID : " + termType.getUuid().toString());
126
		
127
        CommandContributionItemParameter p = new CommandContributionItemParameter(
128
                serviceLocator, 
129
                "",
130
                "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
131
                params,
132
                null,
133
                null,
134
                null,
135
                "All " + termType.getMessage() + "s",
136
                "",
137
                "",                
138
                SWT.PUSH,
139
                "",
140
                true);
141
   
142
        CommandContributionItem item = new CommandContributionItem(p);   
143
        return item;
144
		
145
	}
146
	
147
	
148

  
149
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermContentProvider.java
17 17
import org.eclipse.jface.viewers.ITreeContentProvider;
18 18
import org.eclipse.jface.viewers.Viewer;
19 19

  
20
import eu.etaxonomy.cdm.model.common.DefinedTerm;
20 21
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
22
import eu.etaxonomy.cdm.model.common.TermBase;
21 23
import eu.etaxonomy.cdm.model.common.TermVocabulary;
22 24
import eu.etaxonomy.taxeditor.store.CdmStore;
23 25

  
......
54 56
	
55 57
		Collection<TermVocabulary> inputElements = (Collection<TermVocabulary>) inputElement;
56 58
		return inputElements.toArray();
57
		//return null;
59

  
58 60
	}
59 61

  
60 62
	/* (non-Javadoc)
......
63 65
	@Override
64 66
	public Object[] getChildren(Object parentElement) {
65 67
		
66
		if(parentElement instanceof TermVocabulary){
67
			return getTopLevelElements((TermVocabulary) parentElement);
68
		if(parentElement instanceof TermVocabulary){			
69
			return getTopLevelElements((TermVocabulary)parentElement);
68 70
		} else if (parentElement instanceof DefinedTermBase) {
69 71
			return ((DefinedTermBase) parentElement).getIncludes().toArray();
70 72
		}
......
86 88
		for (DefinedTermBase term : terms){
87 89
			 if (term.getPartOf() == null){
88 90
				 topLevelTerms.add(term);
89
			 }
90
				
91
		}
92
	 
91
			 }				
92
		}	 
93 93
	 	return topLevelTerms.toArray();
94 94
	}
95 95

  
......
98 98
	 */
99 99
	@Override
100 100
	public Object getParent(Object element) {
101
		
101

  
102 102
		if(element instanceof DefinedTermBase){
103
			
104
			DefinedTermBase definedTerm = (DefinedTermBase)element;
105
			if (definedTerm.getPartOf() == null) {
106
				return definedTerm.getVocabulary();
103
			DefinedTermBase definedTermBase = (DefinedTermBase)element;
104
			if (definedTermBase.getPartOf() == null) {
105
				return definedTermBase.getVocabulary();
107 106
			} else {
108
				return definedTerm.getPartOf();
109
			}
110
		} 	
107
				return definedTermBase.getPartOf();
108
			}			
109
		}
111 110
		return null;
111

  
112 112
	}
113 113

  
114 114
	/* (non-Javadoc)
115 115
	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
116 116
	 */
117 117
	@Override
118
	public boolean hasChildren(Object element) {
119
		
120
		if (getChildren(element) != null){
121
			
118
	public boolean hasChildren(Object element) {		
119
		if (getChildren(element) != null){			
122 120
			return getChildren(element).length > 0;
123 121
		}
124 122
		return false;
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermLabelProvider.java
10 10
package eu.etaxonomy.taxeditor.editor.definedterm;
11 11

  
12 12
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
13
import org.eclipse.jface.viewers.StyledString.Styler;
13 14
import org.eclipse.jface.viewers.LabelProvider;
15
import org.eclipse.jface.viewers.StyledCellLabelProvider;
14 16
import org.eclipse.jface.viewers.StyledString;
17
import org.eclipse.jface.viewers.ViewerCell;
18
import org.eclipse.swt.SWT;
19
import org.eclipse.swt.custom.StyleRange;
20
import org.eclipse.swt.graphics.Color;
21
import org.eclipse.swt.graphics.TextStyle;
22
import org.eclipse.swt.widgets.Display;
15 23

  
24
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
16 25
import eu.etaxonomy.cdm.model.common.TermBase;
17 26
import eu.etaxonomy.cdm.model.common.TermVocabulary;
27
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
18 28

  
19 29
/**
20 30
 * @author l.morris
21 31
 * @date 9 Dec 2011
22 32
 *
23 33
 */
24
public class TermLabelProvider extends LabelProvider implements
25
		IStyledLabelProvider {
34
public class TermLabelProvider extends StyledCellLabelProvider {
26 35

  
36
	private static Color vocColor = Display.getCurrent().getSystemColor(
37
			SWT.COLOR_BLUE);
38
	private Styler vocStyler;
27 39
	/* (non-Javadoc)
28 40
	 * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
29 41
	 */
42
	
43
	/*
44
	 * (non-Javadoc)
45
	 * 
46
	 * @see
47
	 * org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.
48
	 * jface.viewers.ViewerCell)
49
	 */
30 50
	@Override
51
	public void update(ViewerCell cell) {
52
		Object element = cell.getElement();
53
		int columnIndex = cell.getColumnIndex();
54

  
55
		String text = getText(element);					
56
		cell.setText(text);
57
		
58
		if (element instanceof TermVocabulary) {		
59
			StyledString styledString = new StyledString(text, getVocabularyStyler());
60
			StyleRange[] styleRanges;
61
			styleRanges = styledString.getStyleRanges();
62
			cell.setStyleRanges(styleRanges);
63
		} 
64
		super.update(cell);
65
	}
66
	
31 67
	public StyledString getStyledText(Object element) {
32 68
		
69
		if(element instanceof TermVocabulary){
70
			new StyledString(getText(element), getVocabularyStyler());
71
		}
33 72
		return  new StyledString(getText(element), StyledString.QUALIFIER_STYLER);
34 73
	}
35 74
	
36 75
	/* (non-Javadoc)
37 76
	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
38 77
	 */
39
	@Override
78
	
40 79
	public String getText(Object element) {
41 80
		
42 81
		if (element instanceof TermBase){
43
			return ((TermBase)element).getLabel();
82
			return ((TermBase)element).getTitleCache();
44 83
		} 
45
		return super.getText(element);
84
		//FIXME : must throw an exception here
85
		return element.toString();
86
	}
87
	
88
	private Styler getVocabularyStyler() {
89
		if (vocStyler == null) {
90
			vocStyler = new Styler() {
91
				@Override
92
				public void applyStyles(TextStyle textStyle) {
93
					textStyle.foreground = vocColor;
94
				}
95
			};
96
		}
97
		return vocStyler;
46 98
	}
47 99

  
48 100
}

Also available in: Unified diff