
com.graphaware.module.algo.path.PropertyBasedRelationshipCostFinder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of algorithms Show documentation
Show all versions of algorithms Show documentation
GraphAware Framework Module exposing custom graph algorithms as Java and REST APIs
/*
* Copyright (c) 2013-2016 GraphAware
*
* This file is part of the GraphAware Framework.
*
* GraphAware Framework is free software: you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of
* the GNU General Public License along with this program. If not, see
* .
*/
package com.graphaware.module.algo.path;
import org.neo4j.graphdb.Relationship;
/**
* {@link com.graphaware.module.algo.path.RelationshipCostFinder} that reads the cost from a relationship's property.
* In case the property is undefined or not a number, {@link #getDefaultCost()} is called to let subclasses determine
* the cost.
*/
public abstract class PropertyBasedRelationshipCostFinder implements RelationshipCostFinder {
private final String costPropertyKey;
/**
* Construct a new cost finder.
*
* @param costPropertyKey key of the relationship property that defines cost.
*/
protected PropertyBasedRelationshipCostFinder(String costPropertyKey) {
this.costPropertyKey = costPropertyKey;
}
/**
* {@inheritDoc}
*/
@Override
public long getCost(Relationship relationship) {
if (!relationship.hasProperty(costPropertyKey)) {
return getDefaultCost();
}
return objectToLong(relationship.getProperty(costPropertyKey));
}
/**
* Get the value of a numerical property, or default (if not a number).
*
* @param value to covert to long.
* @return long value or default.
*/
private long objectToLong(Object value) {
if (value instanceof Integer) {
return new Integer((int) value).longValue();
}
if (value instanceof Long) {
return (long) value;
}
return getDefaultCost();
}
/**
* Get the cost of a relationship with undefined cost property.
*
* @return default cost.
*/
protected abstract long getDefaultCost();
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy