taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorInputFactory.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorReconcilingStrategy.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorSourceViewerConfiguration.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/CdmEntityAnnotation.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/CdmEntityAnnotationModel.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IBulkEditorConstants.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainer.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainerCreator.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ILineSelectionSource.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineAnnotation.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineAnnotationModel.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelection.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelectionSource.java -text
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelectionViewer.java -text
*/\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.jface.text.IDocument;\r
import org.eclipse.jface.text.source.Annotation;\r
import org.eclipse.jface.text.source.ISourceViewer;\r
* @version 1.0\r
*/\r
public class BulkEditor extends TextEditor {\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger\r
+ .getLogger(BulkEditor.class);\r
\r
public static final String ID = "bulkeditor.editor";\r
\r
\r
private void toggleMergeCandidateAnnotation(int line) {\r
IDocument document = viewer.getDocument();\r
- CdmEntityAnnotationModel model = \r
- (CdmEntityAnnotationModel) viewer.getAnnotationModel();\r
+ LineAnnotationModel model = \r
+ (LineAnnotationModel) viewer.getAnnotationModel();\r
\r
Annotation annotation = model.getAnnotationAtLine(line, document);\r
\r
if (annotation != null) {\r
if (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_CANDIDATE)) {\r
model.changeAnnotationType(\r
- annotation, CdmEntityAnnotation.TYPE_GENERIC);\r
+ annotation, LineAnnotation.TYPE_GENERIC);\r
} else {\r
model.changeAnnotationType(\r
annotation, IBulkEditorConstants.TYPE_MERGE_CANDIDATE);\r
*/\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
+import java.util.ArrayList;\r
import java.util.HashMap;\r
-import java.util.List;\r
+import java.util.Iterator;\r
import java.util.Map;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.core.runtime.CoreException;\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.jface.operation.IRunnableContext;\r
import org.eclipse.jface.text.source.IAnnotationModel;\r
import org.eclipse.ui.texteditor.AbstractDocumentProvider;\r
\r
+import eu.etaxonomy.cdm.model.reference.Journal;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+\r
/**\r
* @author p.ciardelli\r
* @created 25.06.2009\r
* @version 1.0\r
*/\r
-public class BulkEditorDocumentProvider extends AbstractDocumentProvider {\r
+public class BulkEditorDocumentProvider extends AbstractDocumentProvider implements IEntityContainerCreator {\r
+ private static final Logger logger = Logger\r
+ .getLogger(BulkEditorDocumentProvider.class);\r
\r
private Map<BulkEditorInput, IDocument> documents = \r
new HashMap<BulkEditorInput, IDocument>();\r
\r
private Map<BulkEditorInput, IAnnotationModel> models = \r
new HashMap<BulkEditorInput, IAnnotationModel>();\r
+\r
+ private ArrayList<IEntityContainer<?>> list;\r
\r
@Override\r
public IAnnotationModel getAnnotationModel(Object element) {\r
\r
// Create model as necessary\r
if (model == null) {\r
- model = new CdmEntityAnnotationModel();\r
- ((CdmEntityAnnotationModel) model).setCdmEntityCreator(input);\r
+ model = new LineAnnotationModel();\r
+ ((LineAnnotationModel) model).setEntityContainerCreator(this);\r
models.put(input, model);\r
} \r
return model;\r
BulkEditorInput input = (BulkEditorInput) element;\r
Document document = new Document("");\r
IAnnotationModel model = getAnnotationModel(element);\r
- \r
- List<IEntityContainer<?>> list = ((BulkEditorInput) element).getList();\r
+ \r
String text = "";\r
String line;\r
- for (IEntityContainer<?> container : list) {\r
+ for (IEntityContainer<?> container : getLineContainers(element)) {\r
if (!container.isMarkedAsDeleted() && !container.isMarkedAsMerged()) {\r
line = container.getEditableText() \r
+ document.getDefaultLineDelimiter();\r
\r
Position position = new Position(text.length(), line.length());\r
- Annotation annotation = new CdmEntityAnnotation(container);\r
+ Annotation annotation = new LineAnnotation(container);\r
model.addAnnotation(annotation, position);\r
document.set(document.get() + line);\r
\r
}\r
}\r
documents.put(input, document);\r
- if (model instanceof CdmEntityAnnotationModel) {\r
- ((CdmEntityAnnotationModel) model).printAnnotations();\r
+ if (model instanceof LineAnnotationModel) {\r
+ ((LineAnnotationModel) model).printAnnotations();\r
}\r
return document;\r
}\r
return null;\r
}\r
\r
+ /**\r
+ * @param element \r
+ * @return\r
+ */\r
+ private ArrayList<IEntityContainer<?>> getLineContainers(Object element) {\r
+ if (list == null) {\r
+ list = new ArrayList<IEntityContainer<?>>();\r
+ list.add(createContainer(createReference("Acta universitatis carolinae. Biologica Prague")));\r
+ list.add(createContainer(createReference("Acta universitatis asiae mediae. Botanica")));\r
+ list.add(createContainer(createReference("Acta phytogeographica suecica Uppsala")));\r
+ list.add(createContainer(createReference("Acta botanica neerlandica Amsterdam")));\r
+ list.add(createContainer(createReference("Acta geobotanica hungarica Debrecen, Hungary")));\r
+ }\r
+ return list;\r
+ }\r
+\r
@Override\r
protected void doSaveDocument(IProgressMonitor monitor, Object element,\r
IDocument document, boolean overwrite) throws CoreException {\r
- // TODO Auto-generated method stub\r
- \r
+ if (element instanceof BulkEditorInput) {\r
+ \r
+ // Get new containers from annotation model\r
+ IAnnotationModel model = getAnnotationModel(element);\r
+ Iterator iterator = model.getAnnotationIterator();\r
+ while (iterator.hasNext()) {\r
+ Object object = (Annotation) iterator.next();\r
+ if (object instanceof LineAnnotation) {\r
+ IEntityContainer<?> container = ((LineAnnotation) object).getEntityContainer();\r
+ if (container.isMarkedAsNew() && !container.isMarkedAsDeleted()) {\r
+ getLineContainers(element).add(container); // prob. not necessary\r
+ logger.info("Adding " + container.getEditableText() + " to input");\r
+ }\r
+ }\r
+ }\r
+ \r
+ // Iterate through input's list, deleting or merging as necessary\r
+ for (IEntityContainer<?> container : getLineContainers(element)) {\r
+ if (container.isMarkedAsMerged()) {\r
+ logger.info("Merge " + container.getEditableText() + " into " + container.getMergeTarget());\r
+ // TODO remove from list and from annotation model\r
+ } else if (container.isMarkedAsDeleted()) {\r
+ logger.info("Delete " + container.getEditableText());\r
+ // TODO remove from list and from annotation model\r
+ } else if (container.isMarkedAsNew() || container.isDirty()) {\r
+ logger.info("Save " + container.getEditableText());\r
+ container.setDirty(false);\r
+ }\r
+ }\r
+ }\r
}\r
\r
@Override\r
// enables copy & paste\r
return false;\r
}\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainerCreator#create(java.lang.String)\r
+ */\r
+ public IEntityContainer<?> createContainer(String titleCache) {\r
+ IEntityContainer<?> container = createContainer(createReference(titleCache));\r
+ container.markAsNew();\r
+ return container;\r
+ }\r
+ \r
+ private ReferenceBase createReference(String titleCache) {\r
+ Journal journal = Journal.NewInstance();\r
+ journal.setTitleCache(titleCache);\r
+ return journal;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainerCreator#createContainer(java.lang.Object)\r
+ */\r
+ public IEntityContainer<?> createContainer(Object entity) {\r
+ return new ReferenceContainer((ReferenceBase<?>) entity);\r
+ }\r
}
\ No newline at end of file
\r
import java.util.List;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IMemento;\r
* @version 1.0\r
* @param <T>\r
*/\r
-abstract public class BulkEditorInput implements IEditorInput, IEntityContainerCreator, IPersistableElement {\r
+abstract public class BulkEditorInput implements IEditorInput, IPersistableElement {\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger\r
+ .getLogger(BulkEditorInput.class);\r
\r
/**\r
* See menu parameters for "taxeditor-bulkeditor.commandParameter.inputType" \r
@SuppressWarnings("unchecked")\r
public Object getAdapter(Class adapter) {\r
return null;\r
- } \r
- \r
- public List<IEntityContainer<?>> getList() {\r
- return null;\r
}\r
\r
/* (non-Javadoc)\r
import org.eclipse.jface.text.source.IAnnotationModel;\r
import org.eclipse.jface.text.source.ISourceViewer;\r
\r
-import eu.etaxonomy.cdm.model.reference.Generic;\r
-\r
/**\r
* @author p.ciardelli\r
* @created 25.06.2009\r
IRegion lineRegion = document.getLineInformation(i);\r
String lineText = document.get(lineRegion.getOffset(), lineRegion.getLength());\r
\r
- List<CdmEntityAnnotation> annotationsCurrentLine = ((CdmEntityAnnotationModel) getAnnotationModel()).\r
- getAnnotations(lineOffset, lineLength);\r
+ List<LineAnnotation> annotationsCurrentLine = ((LineAnnotationModel) getAnnotationModel()).\r
+ getUndeletedAnnotations(lineOffset, lineLength);\r
\r
if (annotationsCurrentLine.size() == 0) {\r
logger.debug("Adding new annotation " + lineText);\r
addAnnotation(lineText, lineRegion);\r
} else {\r
- CdmEntityAnnotation currentAnnotation = annotationsCurrentLine.get(0);\r
+ LineAnnotation currentAnnotation = annotationsCurrentLine.get(0);\r
// int length = lineLength + document.getLineDelimiter(i).length();\r
int length = lineLength;\r
logger.debug("Position before: " + getAnnotationModel().getPosition(currentAnnotation));\r
currentAnnotation.setText(lineText);\r
\r
for (int j = 1; j < annotationsCurrentLine.size(); j++) {\r
- getAnnotationModel().removeAnnotation(annotationsCurrentLine.get(j));\r
+ annotationsCurrentLine.get(j).markDeleted(true);\r
+ \r
+// getAnnotationModel().removeAnnotation(annotationsCurrentLine.get(j));\r
}\r
}\r
}\r
\r
// Deletes have already taken place\r
\r
- ((CdmEntityAnnotationModel) getAnnotationModel()).printAnnotations();\r
+ ((LineAnnotationModel) getAnnotationModel()).printAnnotations();\r
}\r
\r
- @SuppressWarnings("unused")\r
- synchronized private void doReconcile_(DirtyRegion dirtyRegion) throws BadLocationException {\r
- \r
- int dirtyOffset = dirtyRegion.getOffset();\r
- int dirtyLength = dirtyRegion.getLength();\r
- IRegion firstLineRegion = document.getLineInformationOfOffset(dirtyOffset);\r
- String firstLineText = document.get(firstLineRegion.getOffset(), firstLineRegion.getLength());\r
- \r
- Annotation currentAnnotation = null;\r
- Position currentPosition = null;\r
- int currentLength = 0; \r
- // Get all annotations on current line\r
- for (Annotation annotation : \r
- ((CdmEntityAnnotationModel) getAnnotationModel()).getAnnotations(firstLineRegion.getOffset(), firstLineRegion.getLength())) {\r
- if (currentAnnotation == null) {\r
- // First annotation updated w text of entire line\r
- currentAnnotation = annotation;\r
- currentAnnotation.setText(firstLineText);\r
- currentPosition = getAnnotationModel().getPosition(annotation);\r
- currentLength = currentPosition.getLength();\r
- } else {\r
- if (DirtyRegion.REMOVE.equals(dirtyRegion.getType())) {\r
- // Remove annotations that squirted on to the same line\r
- currentLength += \r
- getAnnotationModel().getPosition(annotation).getLength();\r
- getAnnotationModel().removeAnnotation(annotation);\r
- }\r
- }\r
- }\r
- currentPosition.setLength(currentLength);\r
- \r
- // PROBLEM: 0-length annotations, i.e. <CR>\r
- \r
- if (DirtyRegion.INSERT.equals(dirtyRegion.getType())) {\r
- int remainingLines = document.getNumberOfLines(dirtyOffset, dirtyLength) - 1;\r
- if (remainingLines > 0) {\r
- // Make annotations out of any new lines\r
- int firstLine = document.getLineOfOffset(dirtyOffset);\r
- for (int i = firstLine + 1; i <= firstLine + remainingLines; i++) {\r
- IRegion lineRegion = document.getLineInformation(i);\r
- String lineText = document.get(lineRegion.getOffset(), lineRegion.getLength());\r
- \r
- addAnnotation(lineText, lineRegion);\r
- }\r
- } \r
- }\r
- \r
- logger.debug(dirtyRegion.getType());\r
- if (getAnnotationModel() instanceof CdmEntityAnnotationModel) {\r
- ((CdmEntityAnnotationModel) getAnnotationModel()).printAnnotations();\r
- }\r
- }\r
+// @SuppressWarnings("unused")\r
+// synchronized private void doReconcile_(DirtyRegion dirtyRegion) throws BadLocationException {\r
+// \r
+// int dirtyOffset = dirtyRegion.getOffset();\r
+// int dirtyLength = dirtyRegion.getLength();\r
+// IRegion firstLineRegion = document.getLineInformationOfOffset(dirtyOffset);\r
+// String firstLineText = document.get(firstLineRegion.getOffset(), firstLineRegion.getLength());\r
+// \r
+// Annotation currentAnnotation = null;\r
+// Position currentPosition = null;\r
+// int currentLength = 0; \r
+// // Get all annotations on current line\r
+// for (Annotation annotation : \r
+// ((CdmEntityAnnotationModel) getAnnotationModel()).getAnnotations(firstLineRegion.getOffset(), firstLineRegion.getLength())) {\r
+// if (currentAnnotation == null) {\r
+// // First annotation updated w text of entire line\r
+// currentAnnotation = annotation;\r
+// currentAnnotation.setText(firstLineText);\r
+// currentPosition = getAnnotationModel().getPosition(annotation);\r
+// currentLength = currentPosition.getLength();\r
+// } else {\r
+// if (DirtyRegion.REMOVE.equals(dirtyRegion.getType())) {\r
+// // Remove annotations that squirted on to the same line\r
+// currentLength += \r
+// getAnnotationModel().getPosition(annotation).getLength();\r
+// getAnnotationModel().removeAnnotation(annotation);\r
+// }\r
+// }\r
+// }\r
+// currentPosition.setLength(currentLength);\r
+// \r
+// // PROBLEM: 0-length annotations, i.e. <CR>\r
+// \r
+// if (DirtyRegion.INSERT.equals(dirtyRegion.getType())) {\r
+// int remainingLines = document.getNumberOfLines(dirtyOffset, dirtyLength) - 1;\r
+// if (remainingLines > 0) {\r
+// // Make annotations out of any new lines\r
+// int firstLine = document.getLineOfOffset(dirtyOffset);\r
+// for (int i = firstLine + 1; i <= firstLine + remainingLines; i++) {\r
+// IRegion lineRegion = document.getLineInformation(i);\r
+// String lineText = document.get(lineRegion.getOffset(), lineRegion.getLength());\r
+// \r
+// addAnnotation(lineText, lineRegion);\r
+// }\r
+// } \r
+// }\r
+// \r
+// logger.debug(dirtyRegion.getType());\r
+// if (getAnnotationModel() instanceof CdmEntityAnnotationModel) {\r
+// ((CdmEntityAnnotationModel) getAnnotationModel()).printAnnotations();\r
+// }\r
+// }\r
\r
private void addAnnotation(String text, IRegion region) {\r
Position position = new Position(region.getOffset(), region.getLength());\r
- Annotation annotation = ((CdmEntityAnnotationModel) getAnnotationModel()).createAnnotation(text);\r
+ Annotation annotation = ((LineAnnotationModel) getAnnotationModel()).createAnnotation(text);\r
getAnnotationModel().addAnnotation(annotation, position);\r
+ \r
+// Position position2 = new Position(region.getOffset() + 1, region.getLength() - 2);\r
+// Annotation annotation2 = new Annotation("org.eclipse.ui.workbench.texteditor.error",true,"asdf");\r
+// getAnnotationModel().addAnnotation(annotation2, position2);\r
}\r
\r
private IAnnotationModel getAnnotationModel() {\r
\r
void markAsDeleted();\r
\r
+ void markAsNew();\r
+ \r
boolean isMarkedAsMerged();\r
\r
boolean isMarkedAsDeleted();\r
+ \r
+ boolean isMarkedAsNew();\r
\r
void setText(String text);\r
\r
Object getPropertySource();\r
+\r
+ /**\r
+ * @return\r
+ */\r
+ T getMergeTarget();\r
+\r
+ /**\r
+ * @return\r
+ */\r
+ boolean isDirty();\r
+\r
+ /**\r
+ * @param b\r
+ */\r
+ void setDirty(boolean dirty);\r
}\r
\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
\r
/**\r
* @author p.ciardelli\r
public interface IEntityContainerCreator {\r
\r
/**\r
- * Creates both a new container and a new CDM object, using\r
+ * Creates both a new container and a new domain object, using\r
* titleCache.\r
* \r
* @param titleCache\r
IEntityContainer<?> createContainer(String titleCache);\r
\r
/**\r
- * Creates a new container using an existing CDM object.\r
+ * Creates a new container using an existing domain object.\r
* \r
* @param cdmEntity\r
* @return\r
*/\r
- IEntityContainer<?> createContainer(CdmBase cdmEntity);\r
+ IEntityContainer<?> createContainer(Object entity);\r
}\r
\r
\r
/**\r
+ * Every line in a <code>LineSelectionViewer</code> has an object associated with it. Classes\r
+ * implementing this interface retrieve a line's object. \r
+ * \r
* @author p.ciardelli\r
* @created 03.07.2009\r
* @version 1.0\r
import org.eclipse.jface.text.source.Annotation;\r
\r
/**\r
+ * An <code>Annotation</code> which spans an entire line and holds an object associated\r
+ * with the line in an <code>IEntityContainer</code>. \r
+ * \r
* @author p.ciardelli\r
* @created 25.06.2009\r
* @version 1.0\r
*/\r
-public class CdmEntityAnnotation extends Annotation {\r
+public class LineAnnotation extends Annotation {\r
\r
public static final String TYPE_GENERIC = Annotation.TYPE_UNKNOWN;\r
\r
private IEntityContainer<?> container;\r
\r
- public CdmEntityAnnotation(IEntityContainer<?> container) {\r
+ public LineAnnotation(IEntityContainer<?> container) {\r
Assert.isNotNull(container);\r
this.container = container;\r
setType(TYPE_GENERIC);\r
import org.apache.log4j.Logger;\r
import org.eclipse.jface.text.BadLocationException;\r
import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.Position;\r
import org.eclipse.jface.text.source.Annotation;\r
import org.eclipse.jface.text.source.AnnotationModel;\r
import org.eclipse.jface.text.source.AnnotationModelEvent;\r
\r
/**\r
+ * An <code>AnnotationModel</code> which holds <code>LineAnnotation</code>'s.\r
+ * <p>\r
+ * Major difference with <code>AnnotationModel</code> is that <code>removeAnnotation(Annotation annotation,\r
+ * boolean fireModelChanged)</code> does not remove the annotation from the model, but marks it for \r
+ * deletion in the persistence layer when the document is saved. \r
+ * \r
* @author p.ciardelli\r
* @created 25.06.2009\r
* @version 1.0\r
*/\r
-public class CdmEntityAnnotationModel extends AnnotationModel {\r
+public class LineAnnotationModel extends AnnotationModel {\r
private static final Logger logger = Logger\r
- .getLogger(CdmEntityAnnotationModel.class);\r
+ .getLogger(LineAnnotationModel.class);\r
\r
private Comparator<Annotation> comparator;\r
\r
- private IEntityContainerCreator cdmEntityCreator;\r
+ private IEntityContainerCreator entityCreator;\r
\r
/**\r
* Changes the annotation's type and fires model changed \r
boolean fireModelChanged) {\r
// Set data model element for deletion\r
annotation.markDeleted(true);\r
- super.removeAnnotation(annotation, fireModelChanged);\r
+// super.removeAnnotation(annotation, fireModelChanged);\r
}\r
\r
/**\r
* @param type\r
*/\r
- public void removeAllTargetsOfType(String type) {\r
+ public void removeTypeFromAllAnnotations(String type) {\r
Iterator<?> iterator = getAnnotationIterator();\r
while (iterator.hasNext()) {\r
Annotation annotation = ((Annotation) iterator.next());\r
if (annotation.getType().equals(type)) {\r
annotation.setType(Annotation.TYPE_UNKNOWN);\r
}\r
- } \r
+ }\r
}\r
\r
/**\r
\r
for (Annotation annotation : list) {\r
logger.debug(\r
-// annotation.getClass() + " (" +\r
-// annotation.getType() + ") - " +\r
+ (annotation.isMarkedDeleted() ? "DELETED " : "") +\r
+ (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_CANDIDATE) ? "MERGE " : "") +\r
+ (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_TARGET) ? "TARGET " : "") +\r
+ (((LineAnnotation) annotation).getEntityContainer().isDirty() ? "DIRTY " : "") +\r
annotation.getText() + ": o " +\r
getPosition(annotation).getOffset() + ", l " + \r
- getPosition(annotation).getLength() + ", del? " +\r
- getPosition(annotation).isDeleted());\r
+ getPosition(annotation).getLength());\r
}\r
logger.debug("--------");\r
}\r
* @param length\r
* @return\r
*/\r
- public List<CdmEntityAnnotation> getAnnotations(int offset, int length) {\r
+ public List<LineAnnotation> getUndeletedAnnotations(int offset, int length) {\r
\r
- List<CdmEntityAnnotation> list = new ArrayList<CdmEntityAnnotation>();\r
+ List<LineAnnotation> list = new ArrayList<LineAnnotation>();\r
\r
Iterator<?> iterator = getAnnotationIterator(offset, length, true, true);\r
while (iterator.hasNext()) {\r
Object next = iterator.next();\r
- if (next instanceof CdmEntityAnnotation) {\r
- list.add((CdmEntityAnnotation) next); \r
+ if (next instanceof LineAnnotation && !((Annotation) next).isMarkedDeleted()) {\r
+ list.add((LineAnnotation) next); \r
}\r
}\r
Collections.sort(list, getAnnotationComparator());\r
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)\r
*/\r
public int compare(Annotation annotation1, Annotation annotation2) {\r
- int offset1 = CdmEntityAnnotationModel.this.\r
+ if (annotation1.isMarkedDeleted() && !annotation2.isMarkedDeleted()) {\r
+ return 1;\r
+ }\r
+ if (!annotation1.isMarkedDeleted() && annotation2.isMarkedDeleted()) {\r
+ return -1;\r
+ }\r
+ int offset1 = LineAnnotationModel.this.\r
getPosition(annotation1).getOffset();\r
- int offset2 = CdmEntityAnnotationModel.this.\r
+ int offset2 = LineAnnotationModel.this.\r
getPosition(annotation2).getOffset();\r
if (offset1 > offset2) {\r
return 1;\r
}\r
\r
/**\r
- * The annotation model is assigned responsibility for creating new CDM entities\r
+ * The annotation model is assigned responsibility for creating new containers\r
* from blocks of text.\r
* \r
- * @param cdmEntityCreator\r
+ * @param entityCreator\r
*/\r
- public void setCdmEntityCreator(IEntityContainerCreator cdmEntityCreator) {\r
- this.cdmEntityCreator = cdmEntityCreator;\r
+ public void setEntityContainerCreator(IEntityContainerCreator entityCreator) {\r
+ this.entityCreator = entityCreator;\r
}\r
\r
/**\r
*/\r
public Annotation createAnnotation(String text) {\r
Annotation annotation = null;\r
- if (cdmEntityCreator != null) {\r
- IEntityContainer<?> container = cdmEntityCreator.createContainer(text);\r
- annotation = new CdmEntityAnnotation(container);\r
+ if (entityCreator != null) {\r
+ IEntityContainer<?> container = entityCreator.createContainer(text);\r
+ annotation = new LineAnnotation(container);\r
}\r
return annotation;\r
}\r
getAnnotationIterator(offset, length, true, true);\r
if (iterator.hasNext()) {\r
Annotation annotation = (Annotation) iterator.next();\r
- if (annotation instanceof CdmEntityAnnotation) {\r
- IEntityContainer<?> container = ((CdmEntityAnnotation) annotation).getEntityContainer();\r
+ if (annotation instanceof LineAnnotation) {\r
+ IEntityContainer<?> container = ((LineAnnotation) annotation).getEntityContainer();\r
return container.getPropertySource();\r
}\r
}\r
private ReferenceBase<?> reference;\r
private boolean deleted;\r
private boolean merged;\r
+ private boolean isNew = false;\r
+\r
+ private ReferenceBase<?> mergeTarget;\r
+\r
+ private boolean dirty = false;\r
\r
ReferenceContainer(ReferenceBase<?> reference) {\r
this.reference = reference;\r
logger.debug("Marking " + reference.getTitleCache() + \r
" for merger w " + mergeTarget.getTitleCache()); \r
this.merged = true;\r
+ this.mergeTarget = mergeTarget;\r
}\r
\r
/* (non-Javadoc)\r
*/\r
public void setText(String titleCache) {\r
logger.debug("Changing title cache from " + reference.getTitleCache() + \r
- " to " + titleCache); \r
+ " to " + titleCache); \r
+ dirty = true;\r
reference.setTitleCache(titleCache);\r
}\r
\r
return new ReferencePropertySource(reference);\r
}\r
\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isMarkedAsNew()\r
+ */\r
+ public boolean isMarkedAsNew() {\r
+ return isNew;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsNew()\r
+ */\r
+ public void markAsNew() {\r
+ isNew = true;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getMergeTarget()\r
+ */\r
+ public ReferenceBase<?> getMergeTarget() {\r
+ return mergeTarget;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isDirty()\r
+ */\r
+ public boolean isDirty() {\r
+ return dirty;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#setDirty(boolean)\r
+ */\r
+ public void setDirty(boolean dirty) {\r
+ this.dirty = dirty;\r
+ }\r
}
\ No newline at end of file
*/\r
package eu.etaxonomy.taxeditor.bulkeditor;\r
\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
import org.apache.log4j.Logger;\r
import org.eclipse.ui.IEditorInput;\r
\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.reference.Journal;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-\r
/**\r
* @author p.ciardelli\r
* @created 25.06.2009\r
*/\r
public class ReferenceEditorInput extends BulkEditorInput implements\r
IEditorInput {\r
+ @SuppressWarnings("unused")\r
private static final Logger logger = Logger\r
.getLogger(ReferenceEditorInput.class);\r
-\r
- private ArrayList<IEntityContainer<?>> list;\r
- \r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.bulkeditor.BulkEditorInput#getList()\r
- */\r
- public List<IEntityContainer<?>> getList() {\r
- if (list == null) {\r
- list = new ArrayList<IEntityContainer<?>>();\r
- \r
- list.add(createContainer("Acta universitatis carolinae. Biologica Prague"));\r
- list.add(createContainer("Acta universitatis asiae mediae. Botanica"));\r
- list.add(createContainer("Acta phytogeographica suecica Uppsala"));\r
- list.add(createContainer("Acta botanica neerlandica Amsterdam"));\r
- list.add(createContainer("Acta geobotanica hungarica Debrecen, Hungary"));\r
- }\r
- return list;\r
- }\r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainerCreator#create(java.lang.String)\r
- */\r
- public IEntityContainer<?> createContainer(String titleCache) {\r
- Journal journal = Journal.NewInstance();\r
- journal.setTitleCache(titleCache);\r
- return createContainer(journal);\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainerCreator#create(eu.etaxonomy.cdm.model.common.CdmBase)\r
- */\r
- public IEntityContainer<?> createContainer(CdmBase cdmEntity) {\r
- logger.info("creating");\r
- return new ReferenceContainer((ReferenceBase<?>) cdmEntity);\r
- }\r
}
\ No newline at end of file
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;\r
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorInput;\r
-import eu.etaxonomy.taxeditor.bulkeditor.CdmEntityAnnotation;\r
-import eu.etaxonomy.taxeditor.bulkeditor.CdmEntityAnnotationModel;\r
+import eu.etaxonomy.taxeditor.bulkeditor.LineAnnotation;\r
+import eu.etaxonomy.taxeditor.bulkeditor.LineAnnotationModel;\r
import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;\r
import eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer;\r
\r
if (editor instanceof BulkEditor && input instanceof BulkEditorInput) {\r
\r
IDocumentProvider provider = ((BulkEditor) editor).getDocumentProvider();\r
- CdmEntityAnnotationModel model = \r
- (CdmEntityAnnotationModel) provider.getAnnotationModel(input);\r
+ LineAnnotationModel model = \r
+ (LineAnnotationModel) provider.getAnnotationModel(input);\r
IDocument document = provider.getDocument(input);\r
\r
// Check whether there are any group annotations\r
"No group merge target set", "No group merge target has been set.");\r
return null;\r
} \r
- CdmBase targetEntity = ((CdmEntityAnnotation) targetAnnotation).\r
+ CdmBase targetEntity = ((LineAnnotation) targetAnnotation).\r
getEntityContainer().getCdmEntity();\r
\r
logger.info("Merging group");\r
\r
// Mark entity container for merging with target entity\r
IEntityContainer container = \r
- ((CdmEntityAnnotation) annotation).getEntityContainer();\r
+ ((LineAnnotation) annotation).getEntityContainer();\r
container.markAsMerged(targetEntity);\r
logger.info("Merging " + annotation + " with " + targetAnnotation);\r
\r
}\r
}\r
model.printAnnotations(); \r
+ \r
+ model.removeTypeFromAllAnnotations(IBulkEditorConstants.TYPE_MERGE_CANDIDATE);\r
+ model.removeTypeFromAllAnnotations(IBulkEditorConstants.TYPE_MERGE_TARGET);\r
}\r
return null;\r
}\r
\r
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;\r
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorInput;\r
-import eu.etaxonomy.taxeditor.bulkeditor.CdmEntityAnnotationModel;\r
+import eu.etaxonomy.taxeditor.bulkeditor.LineAnnotationModel;\r
import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;\r
\r
/**\r
if (editor instanceof BulkEditor && input instanceof BulkEditorInput) {\r
\r
IDocumentProvider provider = ((BulkEditor) editor).getDocumentProvider();\r
- CdmEntityAnnotationModel model = \r
- (CdmEntityAnnotationModel) provider.getAnnotationModel(input);\r
+ LineAnnotationModel model = \r
+ (LineAnnotationModel) provider.getAnnotationModel(input);\r
IDocument document = provider.getDocument(input);\r
\r
ISelection selection = HandlerUtil.getActiveMenuSelection(event);\r
annotation = model.getAnnotationAtLine(line, document);\r
\r
// Remove existing merge target\r
- model.removeAllTargetsOfType(IBulkEditorConstants.TYPE_MERGE_TARGET);\r
+ model.removeTypeFromAllAnnotations(IBulkEditorConstants.TYPE_MERGE_TARGET);\r
\r
// Set annotation in current line to merge target\r
if (annotation != null) {\r