/*
* Licensed to the Technische Universität Darmstadt under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The Technische Universität Darmstadt
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dkpro.core.io.lxf.internal.model;
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class LxfGraph
{
private LxfText media;
private List<LxfEdge> edges = new ArrayList<>();
private List<LxfNode> nodes = new ArrayList<>();
private List<LxfRegion> regions = new ArrayList<>();
public LxfText getMedia()
{
return media;
}
public void setMedia(LxfText aMedia)
{
media = aMedia;
}
public List<LxfEdge> getEdges()
{
return edges;
}
public void setEdges(List<LxfEdge> aEdges)
{
edges = aEdges;
}
public List<LxfNode> getNodes()
{
return nodes;
}
public void setNodes(List<LxfNode> aNodes)
{
nodes = aNodes;
}
public List<LxfRegion> getRegions()
{
return regions;
}
public void setRegions(List<LxfRegion> aRegions)
{
regions = aRegions;
}
public LxfRegion getRegion(String[] aRegionId)
{
// We only match on the ID, not on the origin
return regions.stream().filter(r -> r.getId().equals(aRegionId[1])).findFirst().get();
}
public void addNode(LxfNode aNode)
{
nodes.add(aNode);
}
public void addEdge(LxfEdge aEdge)
{
edges.add(aEdge);
}
public void addRegion(LxfRegion aRegion)
{
regions.add(aRegion);
}
public List<LxfEdge> getEdges(LxfNode aFrom, String aRange)
{
// For the domain, we only match on the ID, not on the origin
return edges.stream().filter(e -> (aFrom.getId().equals(e.getFrom()[1])
&& aRange.equals(getNode(e.getTo()).getLayer()))).collect(Collectors.toList());
}
public List<LxfEdge> getEdges(String aDomain, LxfNode aTo)
{
// For the domain, we only match on the ID, not on the origin
return edges.stream().filter(e -> aDomain.equals(getNode(e.getFrom()).getLayer())
&& aTo.getId().equals(e.getTo()[1])).collect(Collectors.toList());
}
public LxfNode getNode(String[] aOID)
{
// We only match on the ID, not on the origin
Optional<LxfNode> node = nodes.stream().filter(n -> n.getId().equals(aOID[1])).findFirst();
if (node.isPresent()) {
return node.get();
}
else {
throw new IllegalArgumentException("Unable to find node with ID " + asList(aOID));
}
}
public LxfNode getNode(String aLayer, String aOrigin, int aIndex, int aRank)
{
return getNode(new String[] { aOrigin,
String.format("%s-n%d@%d", aOrigin, aIndex + 1, aRank + 1) });
}
}