Search in sources :

Example 1 with FindCriteriaValues

use of au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues in project constellation by constellation-app.

the class AdvancedSearchParameters method equals.

/**
 * This checks equality between 2 AdvancedSearchParamter objects. It needs
 * to check every attribute to determine true equality.
 *
 * @param object
 * @return
 */
@Override
public boolean equals(final Object object) {
    int matches = 0;
    if (object == null || getClass() != object.getClass()) {
        return false;
    }
    final AdvancedSearchParameters parameters = (AdvancedSearchParameters) object;
    if (searchAllGraphs == parameters.isSearchAllGraphs()) {
        matches++;
    }
    if (graphElementType.equals(parameters.getGraphElementType())) {
        matches++;
    }
    if (allOrAny.equals(parameters.getAllOrAny())) {
        matches++;
    }
    if (currentSelection == parameters.getCurrentSelection()) {
        matches++;
    }
    // if the size is the same to the new object. continue
    int i = 0;
    if (criteriaValuesList.size() == parameters.getCriteriaValuesList().size()) {
        // for each value in the criteriaValuesList
        for (FindCriteriaValues values : criteriaValuesList) {
            // if the two objects have different attributes return false
            if (!values.getAttribute().equals(parameters.getCriteriaValuesList().get(i).getAttribute()) || !values.getAttributeType().equals(parameters.getCriteriaValuesList().get(i).getAttributeType()) || !values.getFilter().equals(parameters.getCriteriaValuesList().get(i).getFilter())) {
                return false;
            }
            // if the two objects attributeType is the same. continue
            if (values.getAttributeType().equals(parameters.getCriteriaValuesList().get(i).getAttributeType())) {
                // for the object comparion all values must be identical
                switch(values.getAttributeType()) {
                    // treat values as strings
                    case StringAttributeDescription.ATTRIBUTE_NAME:
                        StringCriteriaValues stringParameterValues = (StringCriteriaValues) values;
                        StringCriteriaValues stringActualValues = (StringCriteriaValues) parameters.getCriteriaValuesList().get(i);
                        if (!stringParameterValues.isIgnoreCase() == stringActualValues.isIgnoreCase() || !stringParameterValues.isUseList() == stringActualValues.isUseList() || (!stringActualValues.isUseList() && !stringParameterValues.getText().equals(stringActualValues.getText())) || (stringActualValues.isUseList() && !stringParameterValues.getTextList().equals(stringActualValues.getTextList()))) {
                            return false;
                        }
                        break;
                    // treat values as floats
                    case FloatAttributeDescription.ATTRIBUTE_NAME:
                        FloatCriteriaValues floatParameterValues = (FloatCriteriaValues) values;
                        FloatCriteriaValues floatActualValues = (FloatCriteriaValues) parameters.getCriteriaValuesList().get(i);
                        if (floatParameterValues.getFloatValuePrimary() != floatActualValues.getFloatValuePrimary() || floatParameterValues.getFloatValueSecondary() != floatActualValues.getFloatValueSecondary()) {
                            return false;
                        }
                        break;
                    // treat values as booleans
                    case BooleanAttributeDescription.ATTRIBUTE_NAME:
                        BooleanCriteriaValues boolParameterValues = (BooleanCriteriaValues) values;
                        BooleanCriteriaValues boolActualValues = (BooleanCriteriaValues) parameters.getCriteriaValuesList().get(i);
                        if (boolParameterValues.getBoolValue() != boolActualValues.getBoolValue()) {
                            return false;
                        }
                        break;
                    // treat values as colors
                    case ColorAttributeDescription.ATTRIBUTE_NAME:
                        ColourCriteriaValues colourParameterValues = (ColourCriteriaValues) values;
                        ColourCriteriaValues colourActualValues = (ColourCriteriaValues) parameters.getCriteriaValuesList().get(i);
                        if (!colourParameterValues.getColorValue().equals(colourActualValues.getColorValue())) {
                            return false;
                        }
                        break;
                    // treat values as dateTimes
                    case ZonedDateTimeAttributeDescription.ATTRIBUTE_NAME:
                        DateTimeCriteriaValues dateTimeParameterValues = (DateTimeCriteriaValues) values;
                        DateTimeCriteriaValues dateTimeActualValues = (DateTimeCriteriaValues) parameters.getCriteriaValuesList().get(i);
                        if (!dateTimeParameterValues.getDateTimeStringPrimaryValue().equals(dateTimeActualValues.getDateTimeStringPrimaryValue()) || !dateTimeParameterValues.getDateTimeStringSecondaryValue().equals(dateTimeActualValues.getDateTimeStringSecondaryValue())) {
                            return false;
                        }
                        break;
                    // treat values as icons
                    case IconAttributeDescription.ATTRIBUTE_NAME:
                        IconCriteriaValues iconParameterValues = (IconCriteriaValues) values;
                        IconCriteriaValues iconActualValues = (IconCriteriaValues) parameters.getCriteriaValuesList().get(i);
                        if (!iconParameterValues.getIconValue().equals(iconActualValues.getIconValue())) {
                            return false;
                        }
                        break;
                    default:
                        break;
                }
            }
            i++;
        }
    } else {
        return false;
    }
    /**
     * matches will == 4 if all criteria of object a is the same as object
     * b. It will return false if there is any criteria that doesn't match
     */
    return matches == 4;
}
Also used : FindCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues) IconCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.IconCriteriaValues) ColourCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.ColourCriteriaValues) BooleanCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.BooleanCriteriaValues) DateTimeCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.DateTimeCriteriaValues) StringCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.StringCriteriaValues) FloatCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FloatCriteriaValues)

Example 2 with FindCriteriaValues

use of au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues in project constellation by constellation-app.

the class AdvancedSearchPlugin method searchAsBoolean.

/**
 * This function checks to see if a graph elements boolean attribute matches
 * the criteria specified by the BooleanCriteriaValues.
 *
 * @param values the boolean criteriaValues
 * @param attributeInt the int of the attribute
 * @param currElement the currentElement
 * @param graph the current graph
 * @return
 */
private boolean searchAsBoolean(final FindCriteriaValues values, final int attributeInt, final int currElement, final GraphWriteMethods graph) {
    final BooleanCriteriaValues booleanValues = (BooleanCriteriaValues) values;
    final boolean value = graph.getBooleanValue(attributeInt, currElement);
    boolean matches = false;
    // if the attributes bool value == the users bool value matches = true
    if (booleanValues.getBoolValue() == value) {
        matches = true;
    }
    return matches;
}
Also used : BooleanCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.BooleanCriteriaValues)

Example 3 with FindCriteriaValues

use of au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues in project constellation by constellation-app.

the class AdvancedSearchPlugin method edit.

@Override
protected void edit(GraphWriteMethods graph, PluginInteraction interaction, PluginParameters parameters) throws InterruptedException, PluginException {
    // Retrieve the existing FindResultList Meta attribute
    final int stateId = FindViewConcept.MetaAttribute.FINDVIEW_STATE.ensure(graph);
    FindResultsList foundResult = graph.getObjectValue(stateId, 0);
    /**
     * If it doesn't exist or is null, create a new list with the starting
     * index and the current find parameters. If it does exist, create a
     * list with the correct index and the current find parameters
     */
    if (foundResult == null) {
        foundResult = new FindResultsList(STARTING_INDEX, this.parameters, graph.getId());
    } else {
        /**
         * This is delicate, so don't change. This process, captures the
         * users previous search and their current search, compares the 2 to
         * see if they are the same. If yes then get the previous index of
         * the last foundResult. If its different reset the index. The
         * parameters are instantiated as new variables as there were
         * manipulation issues elsewhere causing this process to fail.
         */
        final FindResultsList oldList = new FindResultsList(STARTING_INDEX, foundResult.getAdvancedSearchParameters(), foundResult.getGraphId());
        final AdvancedSearchParameters oldparameters = oldList.getAdvancedSearchParameters();
        final AdvancedSearchParameters newParamters = new AdvancedSearchParameters(this.parameters);
        final int newIndex = getIndex(newParamters, oldparameters, foundResult.getCurrentIndex());
        foundResult = new FindResultsList(newIndex, newParamters, oldList.getGraphId());
    }
    foundResult.clear();
    graph.setObjectValue(stateId, 0, foundResult);
    final int elementCount = elementType.getElementCount(graph);
    // do this if add to selection
    if (IGNORE.equals(currentSelection)) {
        clearSelection(graph);
    }
    findInCurrentSelectionList = new FindResultsList(graph.getId());
    final FindResultsList findAllMatchingResultsList = new FindResultsList(graph.getId());
    final int selectedAttribute = graph.getAttribute(elementType, VisualConcept.VertexAttribute.SELECTED.getName());
    final Set<FindResult> findResultSet = new HashSet<>();
    /**
     * This loops through all existing graph elements, then loops through
     * all criteria values, then determines what data type the criteria
     * value corresponds to and proceeds the search based on that data type.
     *
     * For example if the data type of the criteria value was a string, it
     * would continue the search as if the graph element attribute in
     * question is a string
     */
    for (int i = 0; i < elementCount; i++) {
        // tracking number to see if a elements value matches all of the
        // users input critera
        int matchesAllCount = 0;
        // get the current element and its unique id
        final int currElement = elementType.getElement(graph, i);
        final long uid = elementType.getUID(graph, currElement);
        // loop through all of the criteriaValues
        for (final FindCriteriaValues values : criteriaList) {
            // get the int value of the current attribute
            int attributeInt = graph.getAttribute(elementType, values.getAttribute());
            // if the attribute int is greater than 0 it exists on this graph
            if (attributeInt >= 0) {
                /**
                 * matches will change to false if the attributes value
                 * matches the given critera.
                 */
                boolean matches = false;
                // Determine what data type to treat the search as
                switch(values.getAttributeType()) {
                    case StringAttributeDescription.ATTRIBUTE_NAME:
                        matches = searchAsString(values, attributeInt, currElement, graph);
                        break;
                    case FloatAttributeDescription.ATTRIBUTE_NAME:
                        matches = searchAsFloat(values, attributeInt, currElement, graph);
                        break;
                    case BooleanAttributeDescription.ATTRIBUTE_NAME:
                        matches = searchAsBoolean(values, attributeInt, currElement, graph);
                        break;
                    case ColorAttributeDescription.ATTRIBUTE_NAME:
                        matches = searchAsColor(values, attributeInt, currElement, graph);
                        break;
                    case ZonedDateTimeAttributeDescription.ATTRIBUTE_NAME:
                        matches = searchAsDateTime(values, attributeInt, currElement, graph);
                        break;
                    case IconAttributeDescription.ATTRIBUTE_NAME:
                        matches = searchAsIcon(values, attributeInt, currElement, graph);
                        break;
                    default:
                        break;
                }
                // if a match was found
                if (matches) {
                    // increase the matchesAllCount by 1
                    matchesAllCount++;
                    // If the serach is select all and match critera = any
                    if (selectAll && ANY.equals(allOrAny)) {
                        // If the current selection = ignore or add to
                        if ((IGNORE.equals(currentSelection) || ADD_TO.equals(currentSelection))) {
                            // set the elements selection attribute to true
                            graph.setBooleanValue(selectedAttribute, currElement, true);
                            // add a new find result to the found results list
                            // of the element
                            foundResult.add(new FindResult(currElement, uid, elementType));
                        // if the current selection = find in and the graph element is already selected
                        } else if (FIND_IN.equals(currentSelection) && graph.getBooleanValue(selectedAttribute, currElement)) {
                            // add a new FindResult of the graph element to the findInCurrentSelection list
                            findInCurrentSelectionList.add(new FindResult(currElement, uid, elementType));
                        // if the current selection = remove from and the graph element is already selected
                        } else if (REMOVE_FROM.equals(currentSelection) && graph.getBooleanValue(selectedAttribute, currElement)) {
                            // set the graph element selection attribute to false
                            graph.setBooleanValue(selectedAttribute, currElement, false);
                            // add a new find result to the found results list
                            // of the element
                            foundResult.add(new FindResult(currElement, uid, elementType));
                        }
                    }
                    // if not select all and the match criteria = any
                    if (!selectAll && ANY.equals(allOrAny)) {
                        // add a new find result to the found results list
                        // of the element
                        foundResult.add(new FindResult(currElement, uid, elementType));
                    }
                }
            }
            /**
             * if match criteria = all and the attributes values match all
             * of the criteria.
             */
            if (allOrAny.equals(ALL) && matchesAllCount == criteriaList.size()) {
                // add a new find result to the found results list
                // of the element
                foundResult.add(new FindResult(currElement, uid, elementType));
                findResultSet.add(new FindResult(currElement, uid, elementType));
                // if the attribute is already selected
                if (graph.getBooleanValue(selectedAttribute, currElement)) {
                    // add it to the find in current selection list
                    findInCurrentSelectionList.add(new FindResult(currElement, uid, elementType));
                }
            }
        }
    }
    findAllMatchingResultsList.addAll(findResultSet);
    // if Find in select all the find in results
    if (FIND_IN.equals(currentSelection)) {
        selectFindInResults(FIND_IN.equals(currentSelection), findInCurrentSelectionList, foundResult, graph, selectedAttribute);
    // if remove from, deselect all the remove from results
    } else if (REMOVE_FROM.equals(currentSelection)) {
        removeFindInResults(REMOVE_FROM.equals(currentSelection), findInCurrentSelectionList, foundResult, graph, selectedAttribute);
    // if select all, select all the results that match all criteria
    } else if (selectAll) {
        selectMatchingAllResults(ALL.equals(allOrAny), findAllMatchingResultsList, foundResult, graph, selectedAttribute);
    }
    // if the user clicked find next or prev
    if (!selectAll) {
        // Clean the find results list to only contain unique graph elements
        final List<FindResult> distinctValues = foundResult.stream().distinct().collect(Collectors.toList());
        foundResult.clear();
        foundResult.addAll(distinctValues);
        /**
         * If the list isn't empty, and the user clicked find next,
         * increment the found lists index by 1, otherwise decrement it by
         * 1. Set the element at the specified index to selected.
         */
        if (!foundResult.isEmpty()) {
            if (selectNext) {
                foundResult.incrementCurrentIndex();
            } else {
                foundResult.decrementCurrentIndex();
            }
            final int elementId = foundResult.get(foundResult.getCurrentIndex()).getID();
            graph.setBooleanValue(selectedAttribute, elementId, true);
        }
        graph.setObjectValue(stateId, 0, foundResult);
    }
    // If no results are found, set the meta attribute to null
    graph.setObjectValue(stateId, 0, foundResult.isEmpty() ? null : foundResult);
}
Also used : FindCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues) AdvancedSearchParameters(au.gov.asd.tac.constellation.views.find2.components.advanced.utilities.AdvancedSearchParameters) FindResultsList(au.gov.asd.tac.constellation.views.find2.utilities.FindResultsList) FindResult(au.gov.asd.tac.constellation.views.find2.utilities.FindResult) HashSet(java.util.HashSet)

Example 4 with FindCriteriaValues

use of au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues in project constellation by constellation-app.

the class AdvancedSearchPluginNGTest method testGetName.

/**
 * Test of getName method, of class AdvancedSearchPlugin.
 */
@Test
public void testGetName() {
    System.out.println("getName");
    List<FindCriteriaValues> findCriteriaValuesList = new ArrayList<>();
    StringCriteriaValues stringCriteriaValue1 = new StringCriteriaValues("string", "Identifier", "Is", "identifer name", true, false);
    findCriteriaValuesList.add(stringCriteriaValue1);
    AdvancedSearchParameters parameters = new AdvancedSearchParameters(findCriteriaValuesList, GraphElementType.VERTEX, "Any", "Ignore", false);
    AdvancedSearchPlugin instance = new AdvancedSearchPlugin(parameters, true, false);
    String expResult = "Find: Advanced Search";
    String result = instance.getName();
    assertEquals(result, expResult);
}
Also used : FindCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues) ArrayList(java.util.ArrayList) AdvancedSearchParameters(au.gov.asd.tac.constellation.views.find2.components.advanced.utilities.AdvancedSearchParameters) StringCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.StringCriteriaValues) Test(org.testng.annotations.Test)

Example 5 with FindCriteriaValues

use of au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues in project constellation by constellation-app.

the class BooleanCriteriaPanelNGTest method testGetCriteriaValues.

/**
 * Test of getCriteriaValues method, of class BooleanCriteriaPanel.
 */
@Test
public void testGetCriteriaValues() {
    System.out.println("getCriteriaValues");
    setupGraph();
    AdvancedFindTab parentComponent = spy(advancedTab);
    final GraphElementType type = GraphElementType.VERTEX;
    BooleanCriteriaPanel booleanCriteriaPanel = new BooleanCriteriaPanel(parentComponent, "dim", type);
    final List<AdvancedCriteriaBorderPane> tempList = new ArrayList<>();
    final GridPane tempGrid = new GridPane();
    tempList.add(booleanCriteriaPanel);
    tempGrid.add(tempList.get(0), 0, 0);
    when(parentComponent.getCorrespondingCriteriaList(Mockito.eq(type))).thenReturn(tempList);
    when(parentComponent.getCorrespondingGridPane(Mockito.eq(type))).thenReturn(tempGrid);
    final List<AdvancedCriteriaBorderPane> criteriaList = parentComponent.getCorrespondingCriteriaList(type);
    final FindCriteriaValues result = criteriaList.get(0).getCriteriaValues();
    final BooleanCriteriaValues boolResult = (BooleanCriteriaValues) result;
    assertEquals(boolResult.getAttribute(), "dim");
    assertEquals(boolResult.getAttributeType(), "boolean");
    assertEquals(boolResult.getFilter(), "Is");
    assertEquals(boolResult.getBoolValue(), true);
}
Also used : FindCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues) GridPane(javafx.scene.layout.GridPane) AdvancedFindTab(au.gov.asd.tac.constellation.views.find2.components.AdvancedFindTab) ArrayList(java.util.ArrayList) BooleanCriteriaValues(au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.BooleanCriteriaValues) GraphElementType(au.gov.asd.tac.constellation.graph.GraphElementType) Test(org.testng.annotations.Test)

Aggregations

FindCriteriaValues (au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FindCriteriaValues)15 ArrayList (java.util.ArrayList)11 Test (org.testng.annotations.Test)11 GraphElementType (au.gov.asd.tac.constellation.graph.GraphElementType)9 StringCriteriaValues (au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.StringCriteriaValues)9 BooleanCriteriaValues (au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.BooleanCriteriaValues)5 ColourCriteriaValues (au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.ColourCriteriaValues)5 FloatCriteriaValues (au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.FloatCriteriaValues)5 AdvancedFindTab (au.gov.asd.tac.constellation.views.find2.components.AdvancedFindTab)4 AdvancedCriteriaBorderPane (au.gov.asd.tac.constellation.views.find2.components.advanced.AdvancedCriteriaBorderPane)4 StringCriteriaPanel (au.gov.asd.tac.constellation.views.find2.components.advanced.StringCriteriaPanel)4 DateTimeCriteriaValues (au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.DateTimeCriteriaValues)4 IconCriteriaValues (au.gov.asd.tac.constellation.views.find2.components.advanced.criteriavalues.IconCriteriaValues)4 AdvancedSearchParameters (au.gov.asd.tac.constellation.views.find2.components.advanced.utilities.AdvancedSearchParameters)4 GridPane (javafx.scene.layout.GridPane)4 FindViewController (au.gov.asd.tac.constellation.views.find2.FindViewController)3 ChoiceBox (javafx.scene.control.ChoiceBox)3 ZonedDateTime (java.time.ZonedDateTime)2 ReadableGraph (au.gov.asd.tac.constellation.graph.ReadableGraph)1 WritableGraph (au.gov.asd.tac.constellation.graph.WritableGraph)1