use of de.catma.tag.PropertyDefinition in project catma by forTEXT.
the class GraphWriter method addTag.
void addTag(Vertex tagsetV, Vertex parentTagV, TagDefinition tag) {
Vertex tagV = graph.addVertex(nt(Tag));
tagV.property("tagId", tag.getUuid());
// tagV.property("author", tag.getAuthor());
// tagV.property("color", tag.getColor());
tagV.property("name", tag.getName());
tagV.property("tag", tag);
logVertex(tagV);
tagsetV.addEdge(rt(hasTag), tagV);
if (parentTagV != null) {
tagV.addEdge(rt(hasParent), parentTagV);
}
for (PropertyDefinition propertyDef : tag.getUserDefinedPropertyDefinitions()) {
addPropertyDefinition(tagV, propertyDef);
}
}
use of de.catma.tag.PropertyDefinition in project catma by forTEXT.
the class AnnotationPanel method showExpandedPossibleValues.
private void showExpandedPossibleValues(PropertyDataItem propertyDataItem) {
PropertyDefinition propertyDefinition = propertyDataItem.getPropertyDefinition();
for (String possibleValue : propertyDefinition.getPossibleValueList()) {
tagsetGrid.getTreeData().addItem(new PropertyDataItem(propertyDefinition), new PossibleValueDataItem(possibleValue));
}
tagsetGrid.expand(propertyDataItem);
}
use of de.catma.tag.PropertyDefinition in project catma by forTEXT.
the class AnnotationPanel method initListeners.
private void initListeners() {
tagChangedListener = new PropertyChangeListener() {
@SuppressWarnings("unchecked")
@Override
public void propertyChange(PropertyChangeEvent evt) {
Object newValue = evt.getNewValue();
Object oldValue = evt.getOldValue();
if (oldValue == null) {
// created
Pair<TagsetDefinition, TagDefinition> value = (Pair<TagsetDefinition, TagDefinition>) newValue;
TagsetDefinition tagset = value.getFirst();
TagDefinition tag = value.getSecond();
if (tag.getParentUuid().isEmpty()) {
Optional<TagsetTreeItem> optionalTagsetItem = findItem(tagset.getUuid());
optionalTagsetItem.ifPresent(tagsetItem -> {
if (tagsetData.contains(tagsetItem)) {
tagsetData.addItem(tagsetItem, new TagDataItem(tag));
tagsetDataProvider.refreshAll();
tagsetGrid.expand(tagsetItem);
}
});
} else {
TagDefinition parentTag = project.getTagManager().getTagLibrary().getTagDefinition(tag.getParentUuid());
Optional<TagsetTreeItem> optionalParentTagItem = findItem(parentTag.getUuid());
optionalParentTagItem.ifPresent(parentTagItem -> {
if (tagsetData.contains(parentTagItem)) {
tagsetData.addItem(parentTagItem, new TagDataItem(tag));
tagsetDataProvider.refreshAll();
tagsetGrid.expand(parentTagItem);
}
});
}
} else if (newValue == null) {
// removed
Pair<TagsetDefinition, TagDefinition> deleted = (Pair<TagsetDefinition, TagDefinition>) oldValue;
TagDefinition deletedTag = deleted.getSecond();
Optional<TagsetTreeItem> optionalDeletedItem = findItem(deletedTag.getUuid());
optionalDeletedItem.ifPresent(deletedItem -> {
if (tagsetData.contains(deletedItem)) {
tagsetData.removeItem(deletedItem);
tagsetDataProvider.refreshAll();
tagsetGrid.deselect(deletedItem);
}
});
} else {
// update
TagDefinition tag = (TagDefinition) newValue;
TagsetDefinition tagset = (TagsetDefinition) oldValue;
Optional<TagsetTreeItem> optionalTagsetItem = findItem(tagset.getUuid());
optionalTagsetItem.ifPresent(tagsetItem -> {
if (tagsetData.contains(tagsetItem)) {
Optional<TagsetTreeItem> optionalTagDataItem = findItem((TagsetDataItem) tagsetItem, tag.getUuid());
optionalTagDataItem.ifPresent(tagDataItem -> {
TagsetTreeItem parent = tagsetData.getParent(tagDataItem);
tagsetData.removeItem(tagDataItem);
((TagDataItem) tagDataItem).setPropertiesExpanded(true);
tagsetData.addItem(parent, tagDataItem);
// TODO: sort
tagsetDataProvider.refreshAll();
showExpandedProperties(((TagDataItem) tagDataItem));
});
}
});
}
}
};
project.getTagManager().addPropertyChangeListener(TagManagerEvent.tagDefinitionChanged, tagChangedListener);
propertyDefinitionChangedListener = new PropertyChangeListener() {
@SuppressWarnings("unchecked")
@Override
public void propertyChange(PropertyChangeEvent evt) {
Object newValue = evt.getNewValue();
Object oldValue = evt.getOldValue();
TagDefinition tag = null;
if (oldValue == null) {
// created
Pair<PropertyDefinition, TagDefinition> newData = (Pair<PropertyDefinition, TagDefinition>) newValue;
tag = newData.getSecond();
} else if (newValue == null) {
// removed
Pair<PropertyDefinition, Pair<TagDefinition, TagsetDefinition>> oldData = (Pair<PropertyDefinition, Pair<TagDefinition, TagsetDefinition>>) oldValue;
tag = oldData.getSecond().getFirst();
} else {
// update
tag = (TagDefinition) oldValue;
}
Optional<TagsetTreeItem> optionalParentItem = Optional.empty();
if (tag.getParentUuid().isEmpty()) {
optionalParentItem = findItem(project.getTagManager().getTagLibrary().getTagsetDefinition(tag.getTagsetDefinitionUuid()).getUuid());
} else {
optionalParentItem = findItem(project.getTagManager().getTagLibrary().getTagDefinition(tag.getParentUuid()).getUuid());
}
if (optionalParentItem.isPresent()) {
TagsetTreeItem parentItem = optionalParentItem.get();
final String tagId = tag.getUuid();
tagsetData.getChildren(parentItem).stream().filter(tagsetTreeItem -> tagsetTreeItem instanceof TagDataItem).map(tagsetTreeItem -> (TagDataItem) tagsetTreeItem).filter(tagDataItem -> tagDataItem.getTag().getUuid().equals(tagId)).findFirst().ifPresent(tagDataItem -> {
tagsetDataProvider.refreshItem(tagDataItem);
tagDataItem.setPropertiesExpanded(false);
hideExpandedProperties(tagDataItem);
tagDataItem.setPropertiesExpanded(true);
showExpandedProperties(tagDataItem);
});
}
tagsetDataProvider.refreshAll();
tagsetGrid.deselectAll();
}
};
project.getTagManager().addPropertyChangeListener(TagManagerEvent.userPropertyDefinitionChanged, propertyDefinitionChangedListener);
}
use of de.catma.tag.PropertyDefinition in project catma by forTEXT.
the class AnnotationPanel method handleBulkEditProperties.
private void handleBulkEditProperties(List<PropertyDefinition> editedProperties, List<PropertyDefinition> commonProperties, List<TagDefinition> targetTags) {
final Set<String> availableCommonPropertyNames = editedProperties.stream().map(propertyDef -> propertyDef.getName()).collect(Collectors.toSet());
final Set<String> deletedCommonProperyNames = commonProperties.stream().map(propertyDef -> propertyDef.getName()).filter(name -> !availableCommonPropertyNames.contains(name)).collect(Collectors.toSet());
for (TagDefinition tag : targetTags) {
TagsetDefinition tagset = project.getTagManager().getTagLibrary().getTagsetDefinition(tag);
for (PropertyDefinition existingPropertyDef : new ArrayList<>(tag.getUserDefinedPropertyDefinitions())) {
// handle deleted PropertyDefs
if (deletedCommonProperyNames.contains(existingPropertyDef.getName())) {
project.getTagManager().removeUserDefinedPropertyDefinition(existingPropertyDef, tag, tagset);
} else // handle updated PropertyDefs
if (availableCommonPropertyNames.contains(existingPropertyDef.getName())) {
editedProperties.stream().filter(possiblyChangedPd -> possiblyChangedPd.getName().equals(existingPropertyDef.getName())).findFirst().ifPresent(possiblyChangedPd -> existingPropertyDef.setPossibleValueList(possiblyChangedPd.getPossibleValueList()));
project.getTagManager().updateUserDefinedPropertyDefinition(tag, existingPropertyDef);
}
}
// handle created PropertyDefs
for (PropertyDefinition pd : editedProperties) {
if (tag.getPropertyDefinition(pd.getName()) == null) {
PropertyDefinition createdPropertyDefinition = new PropertyDefinition(pd);
pd.setUuid(idGenerator.generate());
project.getTagManager().addUserDefinedPropertyDefinition(tag, createdPropertyDefinition);
}
}
}
}
use of de.catma.tag.PropertyDefinition in project catma by forTEXT.
the class AnnotationPanel method handleAddPropertyRequest.
private void handleAddPropertyRequest() {
final List<TagDefinition> targetTags = new ArrayList<>();
if (tagsetGrid.getSelectedItems().size() == 1) {
TagsetTreeItem selectedItem = tagsetGrid.getSelectedItems().iterator().next();
while (!(selectedItem instanceof TagDataItem) && (selectedItem != null)) {
selectedItem = tagsetData.getParent(selectedItem);
}
if (selectedItem != null) {
targetTags.add(((TagDataItem) selectedItem).getTag());
}
} else {
targetTags.addAll(tagsetGrid.getSelectedItems().stream().filter(tagsetTreeItem -> tagsetTreeItem instanceof TagDataItem).map(tagsetTreeItem -> ((TagDataItem) tagsetTreeItem).getTag()).collect(Collectors.toList()));
}
if (targetTags.isEmpty()) {
Notification.show("Info", "Please select one ore more Tags first!", Type.TRAY_NOTIFICATION);
} else {
for (TagDefinition targetTag : targetTags) {
if (!project.hasPermission(project.getRoleForTagset(targetTag.getTagsetDefinitionUuid()), RBACPermission.TAGSET_WRITE)) {
Notification.show("Info", String.format("You do not have the permission to make changes to the Tagset of Tag %1$s, " + "Please contact the Project maintainer!", targetTag.getName()), Type.HUMANIZED_MESSAGE);
return;
}
}
Multimap<String, PropertyDefinition> propertiesByName = ArrayListMultimap.create();
for (TagDefinition tag : targetTags) {
for (PropertyDefinition propertyDef : tag.getUserDefinedPropertyDefinitions()) {
if (!propertiesByName.containsKey(propertyDef.getName()) || propertiesByName.get(propertyDef.getName()).iterator().next().getPossibleValueList().equals(propertyDef.getPossibleValueList())) {
propertiesByName.put(propertyDef.getName(), propertyDef);
}
}
}
List<PropertyDefinition> commonProperties = propertiesByName.asMap().entrySet().stream().filter(entry -> entry.getValue().size() == targetTags.size()).map(entry -> new PropertyDefinition(entry.getValue().iterator().next())).collect(Collectors.toList());
// just a single tag's properties or is it a bulk(>1) edit?
final boolean bulkEdit = targetTags.size() > 1;
AddEditPropertyDialog addPropertyDialog = new AddEditPropertyDialog(bulkEdit, commonProperties, new SaveCancelListener<List<PropertyDefinition>>() {
@Override
public void savePressed(List<PropertyDefinition> result) {
if (bulkEdit) {
handleBulkEditProperties(result, commonProperties, targetTags);
} else {
handleSingleEditProperties(result, targetTags.iterator().next());
}
}
});
addPropertyDialog.show();
}
}
Aggregations