package com.onaro.sanscreen.client.view.tabular.value; public class PortSymmetrixTableValueFactory extends BaseTableValueFactory{ public PortSymmetrixTableValueFactory() { super(new ComparatorTableValueFactory()); } /** FA-3A port: 0 * prefix (FA)- parse until the - * slot (3) - parse from the - until the first non digit * processor (A) - parse until the space * port (0) - parse from first to last digit */ public TableValue createImpl(Object display) throws IllegalArgumentException { if (display != null) { char[] chars = display.toString().trim().toCharArray(); int i = 0; int indexOfHyphen = -1; int indexOfFirstProcessorChar = -1; int indexOfSpaceStart = -1; int indexOfFirstPortDigit = -1; for (; i < chars.length; i++) { if (chars[i] == '-') { indexOfHyphen = i; break; } } if (indexOfHyphen != -1) { for (i++; i < chars.length; i++) { if (!Character.isDigit(chars[i])) { indexOfFirstProcessorChar = i; break; } } if (indexOfFirstProcessorChar != -1) { for (i++; i < chars.length; i++) { if (Character.isWhitespace(chars[i])) { indexOfSpaceStart = i; break; } } if(indexOfSpaceStart != -1){ for (i++; i < chars.length; i++) { if (Character.isDigit(chars[i])) { indexOfFirstPortDigit = i; break; } } if(indexOfFirstPortDigit != -1){ String prefix = new String(chars, 0, indexOfHyphen); String slotString = new String(chars,indexOfHyphen+1,indexOfFirstProcessorChar-indexOfHyphen-1); String processor = new String(chars,indexOfFirstProcessorChar,indexOfSpaceStart-indexOfFirstProcessorChar); String portString = new String(chars,indexOfFirstPortDigit,chars.length-indexOfFirstPortDigit); if (slotString.length() > 0 && portString.length() > 0) { int slot = Integer.parseInt(slotString); int port = Integer.parseInt(portString); return new SymmetrixTableValue(prefix, slot, processor, port,display); } } } } } } throw new IllegalArgumentException("Failed to parse number in ["+String.valueOf(display)+"]"); //$NON-NLS-1$ //$NON-NLS-2$ } }