/* * Created on Dec 14, 2004 */ package fr.lifl.stc.stan.samples.flow; import java.io.PrintStream; import fr.lifl.stc.stan.analyser.GlobalAnalyser; import fr.lifl.stc.stan.link.Link; import fr.lifl.stc.stan.link.TableLink; import fr.lifl.stc.stan.signature.PartialSignatureData; import java.util.regex.*; /** * @author yann * @author dorina */ public class FlowPartialSignatureData implements PartialSignatureData { static final long serialVersionUID = 0; private TableLink s; /** * */ public FlowPartialSignatureData(TableLink s) { setData(s); } public TableLink getData() { return s; } public void setData(TableLink s) { this.s = s; } private int tokenToIndex(String tok) { try { int i = new Integer(tok).intValue(); if(i<0 || i>=s.getSizeL()) { System.err.println("LinkPartialSignatureData.tokenToIndex() : invalid index"); return 0; } return i; } catch (NumberFormatException e) { System.err.println("LinkPartialSignatureData.tokenToIndex() : not a number \"" + tok + "\""); return 0; } } private int tokenToInt(String tok) { try { int i = new Integer(tok).intValue(); /* if(i<0) { System.err.println("LinkPartialSignatureData.tokenToInt() : invalid index"); return 0; }*/ return i; } catch (NumberFormatException e) { System.err.println("LinkPartialSignatureData.tokenToInt() : not a number \"" + tok + "\""); return 0; } } //FIXME public void setData(String txt) { if (txt.equals("")) return; Matcher m = Pattern.compile("(\\d+)>(\\d+):(-?\\d+),").matcher(txt); if (! m.find()) { System.err.println("Bad argument number in \"" + txt + "\""); return; } do { s.set(tokenToIndex(m.group(1)), tokenToIndex(m.group(2)), GlobalAnalyser.linkFactory.createLink((byte)tokenToInt(m.group(3)))); } while (m.find()); //String[] tokens = txt.split("\\s(\\d+)>(\\d+):(\\d+),"); /* String[] tokens = txt.split("(\\d+)>(\\d+):(-?\\d+),"); for(int i = 0; i < tokens.length; i++) { System.out.print(tokens[i]+" "); } if(tokens.length == 0 || (tokens.length % 3) != 0) { System.err.println("Bad argument number in \"" + txt + "\""); return; } for(int i = 0; i < tokens.length; i+=3) { s.set(tokenToIndex(tokens[i]), tokenToIndex(tokens[i+1]), GlobalAnalyser.linkFactory.createLink((byte)tokenToInt(tokens[i+2]))); //s[tokenToIndex(tokens[i])][tokenToIndex(tokens[i+1])] = true; } */ } public byte[] getDataAsBytes() { return s.toBytes(null); } public void display(PrintStream out) { for(int i = 0; i < s.getSizeL(); i++) for(int j = 0; j < s.getSizeC(); j++) { Link l = s.get(i, j); if(l!=null && ! l.isEmpty()) out.println("" + i + ">>" + j + " : "+l); } } public String toString() { String o = ""; for(int i = 0; i < s.getSizeL(); i++) for(int j = 0; j < s.getSizeC(); j++) { Link l = s.get(i, j); if(l!=null && ! l.isEmpty()) o +="" + i + ">>" + j + " : "+l.toString()+"\t"; } return o; } public String toHTMLString() { String o = "
| R | E | S | F | "; for(int i = 4; i < s.getSizeL(); i++) { o += "P_"+(i-4)+" | "; } o+="||
| R | "; break; case 1: o += "E | "; break; case 2: o += "S | "; break; case 3: o += "F | "; break; default: o += "P_"+(i-4)+" | "; break; } for(int j = 0; j < s.getSizeC(); j++) { Link l = s.get(i, j); if(l!=null && ! l.isEmpty()) o += ""+l+" | "; //o +="" + i + ">>" + j + " : "+l+"\t"; else o += ""; } o += " |