/*
* Copyright (c) 2010 Mathew Hall, University of Sheffield.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* Neither the name of the University of Sheffield nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package translator;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import primitives.cluster.ClusterHead;
import primitives.cluster.IClusterLevel;
import primitives.graph.Graph;
import primitives.graph.Node;
public class SILWriter implements GraphWriter {
public static String getSIL(ClusterHead ch) {
String ret = "";
for (IClusterLevel l : ch.getChildren()) {
ret += writeCluster(l);
}
return ret;
}
public static String writeCluster(IClusterLevel l) {
return "SS(SS-L0:" + getName(l) + ")=" + join(getNodeNames(l), ",")
+ "\n";
}
public static String getName(IClusterLevel cl) {
return join(cl.getIDs(), "_");
}
private static String join(Collection<? extends Object> c, String d) {
String ret = "";
Iterator<? extends Object> iter = c.iterator();
while (iter.hasNext()) {
ret += (iter.next()).toString();
if (iter.hasNext()) {
ret += d;
}
}
return ret;
}
public static Set<String> getNodeNames(IClusterLevel l) {
HashSet<String> nodes = new HashSet<String>();
for (Node n : l.getNodes()) {
nodes.add(n.getLabel());
}
return nodes;
}
@Override
public String getRepresentation(ClusterHead ch) {
return getSIL(ch);
}
@Override
public String getRepresentation(Graph g) {
// TODO Auto-generated method stub
return getSIL(new ClusterHead(g));
}
}