// BasicGridRiskMap:

    // Basic requirements for creating a GridRiskMap chart:
    //   1) Create a data source, usually a Java TableModel
    //   2) Create a data model that uses the data source
    //   3) Set up the desired risk map. This example uses the
    //      GridRiskMap class, which requires SegmentedRangeModel
    //      values for the X and Y axes, and also colors for those
    //      axis values
    //   4) Construct a RiskMapPlot that uses the data model and risk map

    import com.sas.graphics.components.Variable;
    import com.sas.graphics.components.PlotVariable;
    import com.sas.graphics.components.SegmentedRangeModel;
    import com.sas.graphics.components.riskmapplot.RiskMapPlot;
    import com.sas.graphics.components.riskmapplot.RiskMapPlotTableDataModel;
    import com.sas.graphics.components.riskmapplot.GridRiskMap;
    import javax.swing.table.DefaultTableModel;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GridLayout;
    import java.awt.Container;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class BasicGridRiskMap extends JPanel {
      private BasicGridRiskMap  theApp;
      public BasicGridRiskMap () {
          setLayout(new BorderLayout());

      // 1) Create a data source, usually a Java TableModel
         Data dataTable = new Data();  // defined below

      // 2) Construct a data model that uses the data source
         RiskMapPlotTableDataModel dataModel=
           new RiskMapPlotTableDataModel(dataTable);
         dataModel.setXVariable(new PlotVariable("Completeness of Vision"));
         dataModel.setYVariable(new PlotVariable("Ability to Execute"));
         dataModel.setTopMarkerLabelVariable(new Variable("Company Names"));

      // 3) Set up the desired risk map, in this case, a GridRiskMap
         SegmentedRangeModel xRange = SegmentedRangeModel.
           newSegmentedRangeModel(new double[]{0, 10, 20});
         SegmentedRangeModel yRange = SegmentedRangeModel.
           newSegmentedRangeModel(new double[]{0, 10, 20});

         GridRiskMap gridRiskMap = new GridRiskMap(xRange, yRange,
           new Color[][]{ {Color.RED,Color.YELLOW}, {Color.ORANGE, Color.GREEN} });

      // 4) Construct a RiskMapPlot that uses the data model and risk map
         RiskMapPlot riskMapPlot = new RiskMapPlot(dataModel);
         riskMapPlot.getGraphModel().setRiskMap(gridRiskMap);

         add(riskMapPlot, BorderLayout.CENTER);
      }
      private static class Data extends DefaultTableModel
      {
         private Class   columnClass[] = {Double.class, Double.class, String.class, String.class};
         private String  columnNames[] = {"Completeness of Vision" , "Ability to Execute", "Company Names", "Type"};
         private Object  data[][]      = {
           {new Double(11), new Double(9),    "Company A", "Challengers"},
           {new Double(11), new Double(13),   "Company B", "Leaders"},
           {new Double(9),  new Double(11),   "Company C", "Challengers"},
           {new Double(14), new Double(12),   "Company D", "Leaders"},
           {new Double(8),  new Double(10.5), "Company E", "Leaders"},
           {new Double(7),  new Double(9.5),  "Company F", "Leaders"},
           {new Double(8),  new Double(8),    "Company G", "Challengers"},
           {new Double(3),  new Double(8),    "Company H", "Challengers"},
           {new Double(5),  new Double(7),    "Company I", "Leaders"},
           {new Double(4),  new Double(4),    "Company J", "Leaders"},
           {new Double(2),  new Double(4),    "Company K", "Leaders"},
           {new Double(2),  new Double(2),    "Company L", "Challengers"},
           {new Double(9),  new Double(8),    "Company M", "Leaders"},
           {new Double(8),  new Double(6),    "Company N", "Leaders"},
           {new Double(4),  new Double(6),    "Company O", "Leaders"},
           {new Double(5),  new Double(7),    "Company P", "Leaders"},
           {new Double(3),  new Double(7),    "Company Q", "Leaders"}
         };
         public Data()
         {
           super();
           setDataVector(data, columnNames);
         }
         public Class getColumnClass(int column)
         {
           return columnClass[column];
         }
      }
      public static void main(String[] args) {
         JFrame frame = new JFrame("BIP Graph Sample");
         Container container = frame.getContentPane();
         container.setLayout(new BorderLayout());
         container.setBackground(Color.white);

         JPanel bipPanel = new JPanel();
         bipPanel.setLayout(new BorderLayout());
         BasicGridRiskMap  bipGraphSample = new BasicGridRiskMap();

         bipPanel.add(bipGraphSample, BorderLayout.CENTER);
         container.add(bipPanel, BorderLayout.CENTER);
         frame.setSize(600,450);
         frame.addWindowListener(
           new WindowAdapter() {
             public void windowClosing(WindowEvent e) {
               System.exit(0);
             }
           }
         );
         frame.setVisible(true);
      }
    }