use of com.ibm.watson.assistant.v1.model.Entity in project dna by leifeld.
the class Popup method saveContents.
/**
* In a statement popup window, read the contents from all combo boxes and
* save them into the database.
*
* @param simulate If true, do not actually write the changes.
* @return True if at least one of the values has changed.
*/
boolean saveContents(boolean simulate) {
boolean changed = false;
Component[] com = this.gridBagPanel.getComponents();
int i, j;
try {
for (i = 0; i < com.length; i++) {
// the value of a variable, e.g., "EPA"
Object content = null;
// the name of the variable, e.g., "organization"
String variableName;
if (com[i].getClass().getName().equals("javax.swing.JComboBox")) {
// short text
variableName = ((JLabel) com[i - 1]).getText();
@SuppressWarnings("unchecked") JComboBox<Entity> // save the combo box
box = (JComboBox<Entity>) com[i];
if (!((String) box.getSelectedItem().toString()).equals(box.getEditor().getItem().toString())) {
// make sure combo box edits are saved even if the editor has not lost its focus yet
box.setSelectedItem(box.getEditor().getItem());
}
Object object = box.getSelectedItem();
Entity entity;
if (object.getClass().getName().endsWith("String")) {
// if not an existing entity, the editor returns a String
String s = (String) object;
if (s.length() > 0 && s.matches("^\\s+$")) {
// replace a (multiple) whitespace string by an empty string
s = "";
}
s = s.substring(0, Math.min(190, s.length()));
// the new entity has an ID of -1; the SQL class needs to take care of this when writing into the database
entity = new Entity(s);
} else {
entity = (Entity) box.getSelectedItem();
}
for (j = 0; j < this.variables.size(); j++) {
// update the variable corresponding to the variable name identified
if (this.variables.get(j).getKey().equals(variableName)) {
if (!((Entity) this.variables.get(j).getValue()).getValue().equals(entity.getValue())) {
if (simulate == false) {
this.variables.get(j).setValue(entity);
}
changed = true;
}
}
}
} else if (com[i].getClass().getName().equals("javax.swing.JScrollPane")) {
// long text
variableName = ((JLabel) com[i - 1]).getText();
JScrollPane jsp = ((JScrollPane) com[i]);
JTextArea jta = (JTextArea) jsp.getViewport().getView();
content = jta.getText();
if (content == null) {
content = "";
}
for (j = 0; j < this.variables.size(); j++) {
if (this.variables.get(j).getKey().equals(variableName)) {
if (!this.variables.get(j).getValue().equals(content)) {
if (simulate == false) {
this.variables.get(j).setValue(content);
}
changed = true;
}
}
}
} else if (com[i].getClass().getName().equals("javax.swing.JPanel")) {
// integer
variableName = ((JLabel) com[i - 1]).getText();
JPanel jp = (JPanel) com[i];
JSpinner jsp = (JSpinner) jp.getComponent(0);
content = jsp.getValue();
for (j = 0; j < this.variables.size(); j++) {
if (this.variables.get(j).getKey().equals(variableName)) {
if ((Integer) this.variables.get(j).getValue() != content) {
if (simulate == false) {
this.variables.get(j).setValue(content);
}
changed = true;
}
}
}
} else if (com[i].getClass().getName().endsWith("BooleanButtonPanel")) {
// boolean
variableName = ((JLabel) com[i - 1]).getText();
content = ((BooleanButtonPanel) com[i]).isYes();
int intBool;
if ((Boolean) content == false) {
intBool = 0;
} else {
intBool = 1;
}
for (j = 0; j < this.variables.size(); j++) {
if (this.variables.get(j).getKey().equals(variableName)) {
if ((Integer) this.variables.get(j).getValue() != intBool) {
if (simulate == false) {
this.variables.get(j).setValue(intBool);
}
changed = true;
}
}
}
}
}
if (this.coderComboBox != null && this.coder.getId() != ((Coder) coderComboBox.getSelectedItem()).getId()) {
if (simulate == false) {
this.coder = (Coder) coderComboBox.getSelectedItem();
}
changed = true;
}
if (changed == true && simulate == false) {
// write changes into the database
Dna.sql.updateStatement(this.statement.getId(), this.variables, this.coder.getId());
}
} catch (Exception e) {
LogEvent l = new LogEvent(Logger.ERROR, "Could not update statement contents in the database.", "Read contents from popup and tried to save them in the SQL database, but something went wrong. Changes are being reverted. See exception for details.", e);
Dna.logger.log(l);
}
return changed;
}
use of com.ibm.watson.assistant.v1.model.Entity in project dna by leifeld.
the class AttributeComboBoxRenderer method getListCellRendererComponent.
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Entity a = (Entity) value;
JLabel label = new JLabel(a.getValue());
label.setForeground(a.getColor());
// list background
Color selectedColor = javax.swing.UIManager.getColor("List.selectionBackground");
Color notInDatabaseColor = new Color(255, 102, 102);
// selected entry that is not in database: average of the previous two colors
Color selectedAndNotInDatabaseColor = new Color((selectedColor.getRed() + notInDatabaseColor.getRed()) / 2, (selectedColor.getGreen() + notInDatabaseColor.getGreen()) / 2, (selectedColor.getBlue() + notInDatabaseColor.getBlue()) / 2);
Color defaultColor = javax.swing.UIManager.getColor("List.background");
if (isSelected == true && a.isInDatabase() == true) {
label.setBackground(selectedColor);
} else if (isSelected == true && a.isInDatabase() == false) {
label.setBackground(selectedAndNotInDatabaseColor);
} else if (isSelected == false && a.isInDatabase() == false) {
label.setBackground(notInDatabaseColor);
} else if (isSelected == false && a.isInDatabase() == true) {
label.setBackground(defaultColor);
}
label.setOpaque(true);
return label;
}
use of com.ibm.watson.assistant.v1.model.Entity in project dna by leifeld.
the class StatementRecoder method updateContents.
/**
* Update the content components when a new statement is loaded.
*
* @param statementIndex The index of the statement that is loaded.
*/
@SuppressWarnings("unchecked")
private void updateContents(int statementIndex) {
if (statementIndex > -1) {
// this can happen because fireTableDataChanged in the table model triggers a deselection of all rows
// GUI elements in the upper part of the window, including coder combo box and controls
idField.setText(Integer.toString(tableModel.getRow(currentIndex).getId()));
indexField.setText((currentIndex + 1) + " / " + tableModel.getRowCount());
coderComboBox.setSelectedIndex(comboBoxModel.getIndexByCoderId(tableModel.getRow(currentIndex).getCoderId()));
coderComboBox.repaint();
previousButton.setEnabled(currentIndex > 0);
nextButton.setEnabled(currentIndex < tableModel.getRowCount() - 1);
// content combo boxes
// switch to true to color unused entities in red; but it takes much longer with large databases
ArrayList<ArrayList<Entity>> entities = Dna.sql.getEntities(variableIds, false);
for (int i = 0; i < statementType.getVariables().size(); i++) {
String dataType = statementType.getVariables().get(i).getDataType();
if (dataType.equals("short text")) {
// load value
Entity[] entitiesArray = new Entity[entities.get(indexMap.get(i)).size()];
entitiesArray = entities.get(indexMap.get(i)).toArray(entitiesArray);
ComboBoxModel<Entity> model = new DefaultComboBoxModel<Entity>(entitiesArray);
((JComboBox<Entity>) components.get(i)).setModel(model);
Entity value = (Entity) tableModel.getRow(currentIndex).getValues().get(i).getValue();
((JComboBox<Entity>) components.get(i)).getModel().setSelectedItem(value);
// toggle revert button
Entity backupEntity = (Entity) tableModel.getBackupRow(currentIndex).getValues().get(i).getValue();
if (value.getValue().equals(backupEntity.getValue())) {
revertButtons.get(i).setEnabled(false);
} else {
revertButtons.get(i).setEnabled(true);
}
} else if (dataType.equals("long text")) {
// load value
String value = (String) tableModel.getRow(currentIndex).getValues().get(i).getValue();
((JTextArea) components.get(i)).setText(value);
// toggle revert button
String backupText = (String) tableModel.getBackupRow(currentIndex).getValues().get(i).getValue();
if (value.equals(backupText)) {
revertButtons.get(i).setEnabled(false);
} else {
revertButtons.get(i).setEnabled(true);
}
} else if (dataType.equals("boolean")) {
// load value
((BooleanButtonPanel) components.get(i)).setYes((Integer) tableModel.getRow(currentIndex).getValues().get(i).getValue() != 0);
// toggle revert button
boolean b = ((int) tableModel.getBackupRow(currentIndex).getValues().get(i).getValue()) == 1;
if (((BooleanButtonPanel) components.get(i)).isYes() == b) {
revertButtons.get(i).setEnabled(false);
} else {
revertButtons.get(i).setEnabled(true);
}
} else if (dataType.equals("integer")) {
// load value
int value = (int) tableModel.getRow(currentIndex).getValues().get(i).getValue();
((JSpinner) components.get(i)).setValue(value);
// toggle revert button
int b = (int) tableModel.getBackupRow(currentIndex).getValues().get(i).getValue();
if (value == b) {
revertButtons.get(i).setEnabled(false);
} else {
revertButtons.get(i).setEnabled(true);
}
}
}
}
}
use of com.ibm.watson.assistant.v1.model.Entity in project FAAAST-Service by FraunhoferIOSB.
the class TypeExtractor method extractTypeInfo.
public static TypeInfo extractTypeInfo(Object obj) {
if (obj == null) {
return null;
}
Class<?> type = obj.getClass();
if (SubmodelElement.class.isAssignableFrom(type)) {
ElementValueTypeInfo.Builder builder = ElementValueTypeInfo.builder();
SubmodelElement submodelElement = (SubmodelElement) obj;
builder.type(ElementValueMapper.getValueClass(submodelElement.getClass()));
if (AnnotatedRelationshipElement.class.isAssignableFrom(type)) {
AnnotatedRelationshipElement annotatedRelationshipElement = (AnnotatedRelationshipElement) obj;
annotatedRelationshipElement.getAnnotations().forEach(x -> builder.element(x.getIdShort(), extractTypeInfo(x)));
} else if (SubmodelElementCollection.class.isAssignableFrom(type)) {
SubmodelElementCollection submodelElementCollection = (SubmodelElementCollection) obj;
submodelElementCollection.getValues().forEach(x -> builder.element(x.getIdShort(), extractTypeInfo(x)));
} else if (Entity.class.isAssignableFrom(type)) {
Entity entity = (Entity) obj;
entity.getStatements().forEach(x -> builder.element(x.getIdShort(), extractTypeInfo(x)));
} else if (Property.class.isAssignableFrom(obj.getClass())) {
Property property = (Property) obj;
builder.datatype(Datatype.fromName(property.getValueType()));
} else if (Range.class.isAssignableFrom(obj.getClass())) {
Range range = (Range) obj;
builder.datatype(Datatype.fromName(range.getValueType()));
}
return builder.build();
}
if (Submodel.class.isAssignableFrom(type)) {
Submodel submodel = (Submodel) obj;
ContainerTypeInfo.Builder<Object> builder = ContainerTypeInfo.<Object>builder();
builder.type(Submodel.class);
submodel.getSubmodelElements().forEach(x -> builder.element(x.getIdShort(), extractTypeInfo(x)));
return builder.build();
}
if (Collection.class.isAssignableFrom(type)) {
Collection collection = (Collection) obj;
ContainerTypeInfo.Builder<Integer> builder = ContainerTypeInfo.<Integer>builder();
builder.type(Collection.class);
builder.contentType(TypeToken.of(type).resolveType(COLLECTION_GENERIC_TOKEN).getRawType());
Iterator iterator = collection.iterator();
int i = 0;
while (iterator.hasNext()) {
builder.element(i, extractTypeInfo(iterator.next()));
i++;
}
return builder.build();
}
if (Map.class.isAssignableFrom(type)) {
Map map = (Map) obj;
ContainerTypeInfo.Builder<String> builder = ContainerTypeInfo.<String>builder();
builder.type(Map.class);
builder.contentType(TypeToken.of(type).resolveType(MAP_GENERIC_TOKEN).getRawType());
map.forEach((key, value) -> builder.element(key.toString(), extractTypeInfo(value)));
return builder.build();
}
if (type.isArray()) {
Object[] array = (Object[]) obj;
ContainerTypeInfo.Builder<Integer> builder = ContainerTypeInfo.<Integer>builder();
builder.type(Array.class);
builder.contentType(type.getComponentType());
for (int i = 0; i < array.length; i++) {
builder.element(i, extractTypeInfo(array[i]));
}
return builder.build();
}
return ContainerTypeInfo.<Object>builder().build();
}
Aggregations