/******************************************************************************* * Copyright (c) 2016 Bernhard Wedl and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bernhard Wedl - initial API and implementation *******************************************************************************/ package org.eclipse.nebula.visualization.xygraph.styleprovider; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.nebula.visualization.xygraph.dataprovider.IMetaData; import org.eclipse.nebula.visualization.xygraph.dataprovider.ISample; import org.eclipse.nebula.visualization.xygraph.figures.Trace; import org.eclipse.nebula.visualization.xygraph.figures.Trace.PointStyle; import org.eclipse.nebula.visualization.xygraph.util.XYGraphMediaFactory; import org.eclipse.swt.graphics.Color; /** * StyleProvider for a string as formatter... * */ public class StringStyleProvider extends BasePointStyleProvider { @Override public Color getPointColor(ISample sample, Trace trace) { if ((sample == null) || !(sample instanceof IMetaData)) { return trace.getTraceColor(); } Object object = ((IMetaData) sample).getData(); if ((object == null) || !(object instanceof String)) return trace.getTraceColor(); String format = (String) object; for (char ch : format.toCharArray()) { switch (ch) { case 'r': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_RED); case 'g': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_GREEN); case 'b': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_BLUE); case 'c': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_CYAN); case 'm': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_PURPLE); case 'y': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_YELLOW); case 'k': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_BLACK); case 'w': return XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_WHITE); } } return trace.getTraceColor(); } @Override public PointStyle getPointStyle(ISample sample, Trace trace) { if ((sample == null) || !(sample instanceof IMetaData)) { return trace.getPointStyle(); } Object object = ((IMetaData) sample).getData(); if ((object == null) || !(object instanceof String)) return trace.getPointStyle(); String format = (String) object; for (char ch : format.toCharArray()) { switch (ch) { case 'o': return PointStyle.CIRCLE; case 'x': return PointStyle.XCROSS; case '+': return PointStyle.CROSS; case 's': return PointStyle.SQUARE; case 'f': return PointStyle.FILLED_SQUARE; case 'd': return PointStyle.DIAMOND; case 'v': return PointStyle.TRIANGLE; case 'p': return PointStyle.POINT; } } return trace.getPointStyle(); } @Override public int getPointSize(ISample sample, Trace trace) { if ((sample == null) || !(sample instanceof IMetaData)) { return trace.getPointSize(); } Object object = ((IMetaData) sample).getData(); if ((object == null) || !(object instanceof String)) return trace.getPointSize(); String format = (String) object; Pattern regex = Pattern.compile("(\\d+)"); Matcher regexMatcher = regex.matcher(format); if (regexMatcher.find()) { return Integer.parseInt(regexMatcher.group(1)); } return trace.getPointSize(); } }