Package org.eobjects.datacleaner.panels

Examples of org.eobjects.datacleaner.panels.DCPanel


          }
        }
      }
    });

    final DCPanel leftPanel = new DCPanel();
    leftPanel.setLayout(new VerticalLayout());
    leftPanel.add(WidgetUtils.decorateWithShadow(chartPanel, true, 4));

    _backButton.setMargin(new Insets(0, 0, 0, 0));
    _backButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        drillToOverview();
      }
    });

    final DCPanel rightPanel = new DCPanel();
    rightPanel.setLayout(new BorderLayout());
    rightPanel.add(_backButton, BorderLayout.NORTH);
    rightPanel.add(_table.toPanel(), BorderLayout.CENTER);
    rightPanel.getSize().height = chartHeight;

    final JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    split.setOpaque(false);
    split.add(leftPanel);
    split.add(rightPanel);
View Full Code Here


      final String key = (String) _dataset.getKey(i);
      final int count = _dataset.getValue(i).intValue();
      model.setValueAt(key, i, 0);

      if (_groups.containsKey(key)) {
        DCPanel panel = new DCPanel();
        panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));

        JLabel label = new JLabel(count + "");
        JButton button = WidgetFactory.createSmallButton("images/actions/drill-to-detail.png");
        button.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            drillToGroup(key, true);
          }
        });

        panel.add(label);
        panel.add(Box.createHorizontalStrut(4));
        panel.add(button);

        model.setValueAt(panel, i, 1);
      } else {
        model.setValueAt(count, i, 1);
      }
View Full Code Here

    final String resultLabel = LabelUtils.getLabel(analyzerJob);

    final JXTaskPane taskPane = WidgetFactory.createTaskPane(resultLabel, icon);

    final DCPanel taskPanePanel = new DCPanel(WidgetUtils.BG_COLOR_BRIGHT, WidgetUtils.BG_COLOR_BRIGHTEST);
    taskPanePanel.setLayout(new BorderLayout());
    taskPane.add(taskPanePanel);

    taskPanePanel.add(new LoadingIcon());
    _progressInformationPanel.addUserLog("Rendering result for " + resultLabel);

    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        String title = taskPane.getTitle();
        JXTaskPane[] taskPanes = _taskPaneContainer.getTaskPanes();
        boolean added = false;
        for (int i = 0; i < taskPanes.length; i++) {
          JXTaskPane existingTaskPane = taskPanes[i];
          if (existingTaskPane.getTitle().compareTo(title) > 0) {
            _taskPaneContainer.add(taskPane, i);
            added = true;
            break;
          }
        }
        if (!added) {
          _taskPaneContainer.add(taskPane);
        }
      }
    });

    // use a swing worker to run the rendering in the background
    new SwingWorker<JComponent, Void>() {

      @Override
      protected JComponent doInBackground() throws Exception {
        final Renderer<? super AnalyzerResult, ? extends JComponent> renderer = _rendererFactory.getRenderer(result,
            SwingRenderingFormat.class);
        if (renderer == null) {
          final String message = "No renderer found for result type " + result.getClass().getName();
          logger.error(message);
          throw new IllegalStateException(message);
        }
        logger.debug("renderer.render({})", result);
        final JComponent component = renderer.render(result);
        if (logger.isInfoEnabled()) {
          String resultAsString = result.toString();
          if (resultAsString.length() > 150) {
            resultAsString = resultAsString.substring(0, 147) + "...";
          }
          resultAsString = resultAsString.replaceAll("\n", " | ");
          logger.info("renderer.render({}) returned: {}", resultAsString, component);
        }
        return component;
      }

      protected void done() {
        taskPanePanel.removeAll();
        JComponent component;
        try {
          component = get();
          taskPanePanel.add(component);
          _progressInformationPanel.addUserLog("Result rendered for " + resultLabel);
        } catch (Exception e) {
          logger.error("Error occurred while rendering result", e);
          _progressInformationPanel.addUserLog("Error occurred while rendering result", e, false);
          taskPanePanel.add(new JLabel("An error occurred while rendering result, check the status tab"));
        }

        taskPanePanel.updateUI();
      };

    }.execute();
  }
View Full Code Here

@RendererBean(SwingRenderingFormat.class)
public class SimilarityResultSwingRenderer extends AbstractRenderer<SimilarityResult, JComponent> {

  @Override
  public JComponent render(SimilarityResult result) {
    final DCPanel panel = new DCPanel();
    panel.setLayout(new BorderLayout());

    final DefaultTreeRenderer rendererDelegate = new DefaultTreeRenderer();

    final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Similarity groups");

    final List<SimilarityGroup> similarityGroups = result.getSimilarityGroups();
    for (SimilarityGroup sg : similarityGroups) {
      rootNode.add(new DefaultMutableTreeNode(sg));
    }

    final DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);

    final JXTree tree = new JXTree();
    tree.setCellRenderer(new TreeCellRenderer() {
      @Override
      public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
          boolean leaf, int row, boolean hasFocus) {
        if (value instanceof DefaultMutableTreeNode) {
          final Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
          if (userObject instanceof SimilarityGroup) {
            final SimilarityGroup similarityGroup = (SimilarityGroup) userObject;
            final String[] values = similarityGroup.getValues();

            final StringBuilder sb = new StringBuilder();
            sb.append(values.length);
            sb.append(": [");
            for (int i = 0; i < values.length; i++) {
              if (i != 0) {
                sb.append(',');
              }
              sb.append('\"');
              sb.append(values[i]);
              sb.append('\"');
              if (sb.length() > 17) {
                sb.delete(17, sb.length());
                sb.append(",...");
                break;
              }
            }
            sb.append(']');

            value = sb.toString();
          }
        }
        return rendererDelegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
      }
    });
    tree.setModel(treeModel);

    final DCPanel centerPanel = new DCPanel(WidgetUtils.BG_COLOR_BRIGHT, WidgetUtils.BG_COLOR_LESS_BRIGHT);
    centerPanel.setBorder(WidgetUtils.BORDER_EMPTY);
    centerPanel.setLayout(new BorderLayout());

    final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    splitPane.add(WidgetUtils.scrolleable(tree));
    splitPane.add(WidgetUtils.scrolleable(centerPanel));
    splitPane.setDividerLocation(180);
    panel.add(splitPane, BorderLayout.CENTER);

    tree.addMouseListener(new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent e) {
        TreePath path = tree.getPathForLocation(e.getX(), e.getY());
        if (path == null) {
          return;
        }
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
        Object userObject = node.getUserObject();
        if (userObject instanceof SimilarityGroup) {
          SimilarityGroup similarValues = (SimilarityGroup) userObject;
          AnnotatedRowsResult annotatedRowsResult = similarValues.getAnnotatedRows();
          AnnotatedRowsResultSwingRenderer renderer = new AnnotatedRowsResultSwingRenderer();
          JPanel comp = renderer.render(annotatedRowsResult);
          centerPanel.removeAll();
          centerPanel.add(comp, BorderLayout.NORTH);
          centerPanel.updateUI();
        }
      }
    });

    return panel;
View Full Code Here

  @Inject
  public MultipleStringPropertyWidget(ConfiguredPropertyDescriptor propertyDescriptor,
      AbstractBeanJobBuilder<?, ?, ?> beanJobBuilder) {
    super(beanJobBuilder, propertyDescriptor);

    _textFieldPanel = new DCPanel();
    _textFieldPanel.setLayout(new VerticalLayout(2));

    String[] currentValue = (String[]) beanJobBuilder.getConfiguredProperty(propertyDescriptor);
    if (currentValue == null) {
      currentValue = new String[2];
    }
    updateComponents(currentValue);

    final JButton addButton = WidgetFactory.createSmallButton("images/actions/add.png");
    addButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        addTextField("", true);
        fireValueChanged();
      }
    });

    final JButton removeButton = WidgetFactory.createSmallButton("images/actions/remove.png");
    removeButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        int componentCount = _textFieldPanel.getComponentCount();
        if (componentCount > 0) {
          _textFieldPanel.remove(componentCount - 1);
          _textFieldPanel.updateUI();
          fireValueChanged();
        }
      }
    });

    final DCPanel buttonPanel = new DCPanel();
    buttonPanel.setBorder(new EmptyBorder(0, 4, 0, 0));
    buttonPanel.setLayout(new VerticalLayout(2));
    buttonPanel.add(addButton);
    buttonPanel.add(removeButton);

    final DCPanel outerPanel = new DCPanel();
    outerPanel.setLayout(new BorderLayout());

    outerPanel.add(_textFieldPanel, BorderLayout.CENTER);
    outerPanel.add(buttonPanel, BorderLayout.EAST);

    add(outerPanel);
  }
View Full Code Here

    return 465;
  }

  @Override
  protected JComponent getDialogContent() {
    final DCPanel formPanel = new DCPanel();
    int row = 0;
    WidgetUtils.addToGridBag(DCLabel.bright("String pattern name"), formPanel, 0, row);
    WidgetUtils.addToGridBag(_expressionNameField, formPanel, 1, row);

    row++;
    WidgetUtils.addToGridBag(DCLabel.bright("Expression"), formPanel, 0, row);

    _expressionField.getDocument().addDocumentListener(new DocumentListener() {
      public void changedUpdate(DocumentEvent e) {
        checkInputFields();
      }

      public void insertUpdate(DocumentEvent e) {
        checkInputFields();
      }

      public void removeUpdate(DocumentEvent e) {
        checkInputFields();
      }
    });
    WidgetUtils.addToGridBag(_expressionField, formPanel, 1, row);

    _resetButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        _expressionField.setText(_expressionString);
      }
    });
    WidgetUtils.addToGridBag(_resetButton, formPanel, 2, row);

    row++;

    _saveButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        String expressionName = _expressionNameField.getText();
        if (StringUtils.isNullOrEmpty(expressionName)) {
          JOptionPane.showMessageDialog(SimpleStringPatternDialog.this,
              "Please fill out the name of the string expression");
          return;
        }

        String expression = _expressionField.getText();
        if (StringUtils.isNullOrEmpty(expression)) {
          JOptionPane.showMessageDialog(SimpleStringPatternDialog.this, "Please fill out the string expression");
          return;
        }
        if (_simpleStringPattern != null && _catalog.containsStringPattern(_simpleStringPattern.getName())) {
          _catalog.removeStringPattern(_catalog.getStringPattern(_simpleStringPattern.getName()));
        }
        SimpleStringPattern simpleStringPattern = new SimpleStringPattern(expressionName, expression);
        _simpleStringPattern = simpleStringPattern;
        _catalog.addStringPattern(simpleStringPattern);
        SimpleStringPatternDialog.this.dispose();
      }
    });

    final DCPanel buttonPanel = new DCPanel();
    buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
    buttonPanel.add(_saveButton);
    WidgetUtils.addToGridBag(buttonPanel, formPanel, 0, row, 2, 1);

    final DCPanel testitPanel = new DCPanel();
    testitPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));

    _errorLabel = DCLabel.bright("");
    WidgetUtils.addToGridBag(_errorLabel, testitPanel, 0, row);

    row++;
    JLabel testInputLabel = DCLabel.bright("Test input");
    testInputLabel.setIcon(imageManager.getImageIcon("images/actions/test-pattern.png"));
    testInputLabel.setFont(WidgetUtils.FONT_HEADER1);
    WidgetUtils.addToGridBag(testInputLabel, testitPanel, 0, row);

    _inputFields = new ArrayList<JTextField>(NUM_TEST_FIELDS);
    _statusLabels = new ArrayList<JLabel>(NUM_TEST_FIELDS);
    for (int i = 0; i < NUM_TEST_FIELDS; i++) {
      final int index = i;
      JTextField inputField = WidgetFactory.createTextField("Test Input");
      inputField.getDocument().addDocumentListener(new DocumentListener() {
        public void changedUpdate(DocumentEvent e) {
          checkInputField(index);
        }

        public void insertUpdate(DocumentEvent e) {
          checkInputField(index);
        }

        public void removeUpdate(DocumentEvent e) {
          checkInputField(index);
        }
      });
      // inputField.setPreferredSize(d);
      WidgetUtils.addToGridBag(inputField, testitPanel, 0, 4 + i);

      JLabel statusLabel = new JLabel();
      WidgetUtils.addToGridBag(statusLabel, testitPanel, 1, 4 + i);

      _inputFields.add(inputField);
      _statusLabels.add(statusLabel);
    }

    final DCLabel descriptionLabel = DCLabel
        .brightMultiLine("<p>Simple string patterns are tokenized patterns made up of these elements.</p>"
            + "<p>* A = upper case letters<br>* a = lower case letters<br>* 9 = digits</p>");
    descriptionLabel.setBorder(new EmptyBorder(10, 10, 10, 20));
    descriptionLabel.setPreferredSize(new Dimension(300, 100));

    final DCPanel mainPanel = new DCPanel();
    mainPanel.setLayout(new VerticalLayout(4));
    mainPanel.add(descriptionLabel);
    mainPanel.add(formPanel);
    mainPanel.add(testitPanel);

    return mainPanel;
  }
View Full Code Here

      if (!_inputColumns.contains(inputColumn)) {
        _inputColumns.add(inputColumn);
      }
    }

    DCPanel buttonPanel = new DCPanel();
    buttonPanel.setLayout(new HorizontalLayout(2));

    JButton selectAllButton = new JButton("Select all");
    selectAllButton.addActionListener(selectAllActionListener);
    buttonPanel.add(selectAllButton);

    JButton selectNoneButton = new JButton("Select none");
    selectNoneButton.addActionListener(selectNoneActionListener);
    buttonPanel.add(selectNoneButton);

    add(buttonPanel);

    if (getBeanJobBuilder() instanceof TransformerJobBuilder) {
      // remove all the columns that are generated by the transformer
View Full Code Here

    return 465;
  }

  @Override
  protected JComponent getDialogContent() {
    final DCPanel formPanel = new DCPanel();

    int row = 0;
    WidgetUtils.addToGridBag(DCLabel.bright("String pattern name"), formPanel, 0, row);
    WidgetUtils.addToGridBag(_expressionNameField, formPanel, 1, row);

    row++;
    WidgetUtils.addToGridBag(DCLabel.bright("Expression:"), formPanel, 0, row);

    _expressionField.getDocument().addDocumentListener(new DocumentListener() {
      public void changedUpdate(DocumentEvent e) {
        checkInputFields();
      }

      public void insertUpdate(DocumentEvent e) {
        checkInputFields();
      }

      public void removeUpdate(DocumentEvent e) {
        checkInputFields();
      }
    });
    WidgetUtils.addToGridBag(_expressionField, formPanel, 1, row);

    _resetButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        _expressionField.setText(_expressionString);
      }
    });
    WidgetUtils.addToGridBag(_resetButton, formPanel, 2, row);

    row++;

    _saveButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        String expressionName = _expressionNameField.getText();
        if (StringUtils.isNullOrEmpty(expressionName)) {
          JOptionPane.showMessageDialog(RegexStringPatternDialog.this,
              "Please fill out the name of the regular expression");
          return;
        }

        String expression = _expressionField.getText();
        if (StringUtils.isNullOrEmpty(expression)) {
          JOptionPane.showMessageDialog(RegexStringPatternDialog.this, "Please fill out the regular expression");
          return;
        }
        if (_regexStringPattern != null && _catalog.containsStringPattern(_regexStringPattern.getName())) {
          _catalog.removeStringPattern(_catalog.getStringPattern(_regexStringPattern.getName()));
        }
        RegexStringPattern regexStringPattern = new RegexStringPattern(expressionName, expression, true);
        _regexStringPattern = regexStringPattern;
        _catalog.addStringPattern(regexStringPattern);
        RegexStringPatternDialog.this.dispose();
      }
    });

    final DCPanel buttonPanel = new DCPanel();
    buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
    buttonPanel.add(_saveButton);
    WidgetUtils.addToGridBag(buttonPanel, formPanel, 0, row, 2, 1);

    final DCPanel testitPanel = new DCPanel();
    testitPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));

    _errorLabel = DCLabel.bright("");
    WidgetUtils.addToGridBag(_errorLabel, testitPanel, 0, row);

    row++;
    JLabel testInputLabel = DCLabel.bright("Test input");
    testInputLabel.setIcon(imageManager.getImageIcon("images/actions/test-pattern.png"));
    testInputLabel.setFont(WidgetUtils.FONT_HEADER1);
    WidgetUtils.addToGridBag(testInputLabel, testitPanel, 0, row);

    _inputFields = new ArrayList<JTextField>(NUM_TEST_FIELDS);
    _statusLabels = new ArrayList<JLabel>(NUM_TEST_FIELDS);
    for (int i = 0; i < NUM_TEST_FIELDS; i++) {
      final int index = i;
      JTextField inputField = WidgetFactory.createTextField("Test Input");
      inputField.getDocument().addDocumentListener(new DocumentListener() {
        public void changedUpdate(DocumentEvent e) {
          checkInputField(index);
        }

        public void insertUpdate(DocumentEvent e) {
          checkInputField(index);
        }

        public void removeUpdate(DocumentEvent e) {
          checkInputField(index);
        }
      });
      // inputField.setPreferredSize(d);
      WidgetUtils.addToGridBag(inputField, testitPanel, 0, 4 + i);

      JLabel statusLabel = new JLabel();
      WidgetUtils.addToGridBag(statusLabel, testitPanel, 1, 4 + i);

      _inputFields.add(inputField);
      _statusLabels.add(statusLabel);
    }

    final DCLabel descriptionLabel = DCLabel
        .brightMultiLine("A regex (regular expression) is a concise and flexible means for identifying strings of text of interest, such as particular characters, words, or patterns of characters. The registered regexes can be used to identify certain types of strings and validate their pattern-correctness.");
    descriptionLabel.setBorder(new EmptyBorder(10, 10, 10, 20));
    descriptionLabel.setPreferredSize(new Dimension(300, 100));

    final DCPanel mainPanel = new DCPanel();
    mainPanel.setLayout(new VerticalLayout(4));
    mainPanel.add(descriptionLabel);
    mainPanel.add(formPanel);
    mainPanel.add(testitPanel);

    return mainPanel;
  }
View Full Code Here

  @Inject
  UserPreferences userPreferences;

  @Override
  public DCPanel render(final AnnotatedRowsResult result) {
    DCPanel panel = new DCPanel();
    panel.setLayout(new VerticalLayout(4));

    final DCTable table = new DCTable();
    table.setColumnControlVisible(false);

    InputColumn<?>[] highlightedColumns = result.getHighlightedColumns();
    List<InputColumn<?>> inputColumns = result.getInputColumns();

    DCPanel buttonPanel = new DCPanel();
    buttonPanel.setLayout(new HorizontalLayout(4));

    if (highlightedColumns.length == 1 && inputColumns.size() > 1) {
      final JComboBox comboBox = new JComboBox(VIEWS);
      comboBox.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
          if (comboBox.getSelectedItem() == VIEWS[0]) {
            applyDetailedView(table, result);
          } else {
            applyDistinctValuesView(table, result);
          }
        }
      });
      comboBox.setSelectedItem(VIEWS[0]);

      buttonPanel.add(comboBox);
    } else {
      applyDetailedView(table, result);
    }

    final JButton saveToFileButton = new JButton("Save dataset", ImageManager.getInstance().getImageIcon(
        "images/actions/save.png"));
    saveToFileButton.addActionListener(new SaveDataSetActionListener(result.getInputColumns(), result.getRows(),
        userPreferences));
    buttonPanel.add(saveToFileButton);

    panel.add(buttonPanel);
    panel.add(table.toPanel());
    return panel;
  }
View Full Code Here

    return 465;
  }

  @Override
  protected JComponent getDialogContent() {
    final DCPanel formPanel = new DCPanel();

    int row = 0;
    WidgetUtils.addToGridBag(DCLabel.bright("Synonym catalog name:"), formPanel, 0, row);
    WidgetUtils.addToGridBag(_nameTextField, formPanel, 1, row);

    row++;
    WidgetUtils.addToGridBag(DCLabel.bright("Filename:"), formPanel, 0, row);
    WidgetUtils.addToGridBag(_filenameTextField, formPanel, 1, row);

    row++;
    WidgetUtils.addToGridBag(DCLabel.bright("Case sensitive matches:"), formPanel, 0, row);
    WidgetUtils.addToGridBag(_caseSensitiveCheckBox, formPanel, 1, row);

    row++;
    WidgetUtils.addToGridBag(DCLabel.bright("Character encoding:"), formPanel, 0, row);
    WidgetUtils.addToGridBag(_encodingComboBox, formPanel, 1, row);

    row++;
    final JButton saveButton = WidgetFactory.createButton("Save synonym catalog", "images/model/synonym.png");
    saveButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        String name = _nameTextField.getText();
        if (StringUtils.isNullOrEmpty(name)) {
          JOptionPane.showMessageDialog(TextFileSynonymCatalogDialog.this,
              "Please fill out the name of the synonym catalog");
          return;
        }

        String filename = _filenameTextField.getFilename();
        if (StringUtils.isNullOrEmpty(filename)) {
          JOptionPane.showMessageDialog(TextFileSynonymCatalogDialog.this,
              "Please fill out the filename or select a file using the 'Browse' button");
          return;
        }

        String encoding = (String) _encodingComboBox.getSelectedItem();
        if (StringUtils.isNullOrEmpty(filename)) {
          JOptionPane.showMessageDialog(TextFileSynonymCatalogDialog.this, "Please select a character encoding");
          return;
        }

        TextFileSynonymCatalog sc = new TextFileSynonymCatalog(name, filename, _caseSensitiveCheckBox.isSelected(),
            encoding);

        if (_originalsynonymCatalog != null) {
          _catalog.removeSynonymCatalog(_originalsynonymCatalog);
        }
        _catalog.addSynonymCatalog(sc);
        TextFileSynonymCatalogDialog.this.dispose();
      }
    });

    final DCPanel buttonPanel = new DCPanel();
    buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
    buttonPanel.add(saveButton);
    WidgetUtils.addToGridBag(buttonPanel, formPanel, 0, row, 2, 1);

    final DCLabel descriptionLabel = DCLabel
        .brightMultiLine("A text file synonym catalog is a synonym catalog based on a text file containing comma separated values where the first column represents the master term.");
    descriptionLabel.setBorder(new EmptyBorder(10, 10, 10, 20));
    descriptionLabel.setPreferredSize(new Dimension(300, 100));

    final DCPanel mainPanel = new DCPanel();
    mainPanel.setLayout(new VerticalLayout(4));
    mainPanel.add(descriptionLabel);
    mainPanel.add(formPanel);

    return mainPanel;
  }
View Full Code Here

TOP

Related Classes of org.eobjects.datacleaner.panels.DCPanel

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.