@Override
  public List<Component> load() {
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder;
    List<Component> components = new ArrayList<Component>();
    int x = 0;
    int y = 0;
    int width = 0;
    int height = 0;
    Color color = null;
    Document doc = null;
    try {
      dBuilder = dbFactory.newDocumentBuilder();
      doc = dBuilder.parse(filename);
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }

    doc.getDocumentElement().normalize();

    Node figureList = doc.getChildNodes().item(0);
    NodeList figures = figureList.getChildNodes();

    StandartFigure standartFigure;
    for (int i = 0; i < figures.getLength(); i++) {
      Node figure = figures.item(i);

      if (figure.getFirstChild().getTextContent().equals("Circle")) {
        NodeList nodes = figure.getChildNodes();
        for (int j = 0; j < nodes.getLength(); j++) {
          if (nodes.item(j).getNodeName().equals("X"))
            x = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Y"))
            y = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Width"))
            width = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Height"))
            height = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("BoundColor")) {
            NodeList rgb = nodes.item(j).getChildNodes();
            color =
                new Color(
                    Integer.parseInt(rgb.item(0).getTextContent()),
                    Integer.parseInt(rgb.item(1).getTextContent()),
                    Integer.parseInt(rgb.item(2).getTextContent()));
          }
        }
        standartFigure = new StandartFigure(TypeFigure.Circle, new Point(x, y));
        standartFigure.setLocation(new Point(x, y));
        standartFigure.setDimension(width, height);
        standartFigure.setColor(color);
        components.add(standartFigure);
      }
      if (figure.getFirstChild().getTextContent().equals("Square")) {
        NodeList nodes = figure.getChildNodes();
        for (int j = 0; j < nodes.getLength(); j++) {
          if (nodes.item(j).getNodeName().equals("X"))
            x = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Y"))
            y = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Width"))
            width = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Height"))
            height = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("BoundColor")) {
            NodeList rgb = nodes.item(j).getChildNodes();
            color =
                new Color(
                    Integer.parseInt(rgb.item(0).getTextContent()),
                    Integer.parseInt(rgb.item(1).getTextContent()),
                    Integer.parseInt(rgb.item(2).getTextContent()));
          }
        }
        standartFigure = new StandartFigure(TypeFigure.Square, new Point(x, y));
        standartFigure.setDimension(width, height);
        standartFigure.setLocation(new Point(x, y));
        standartFigure.setColor(color);
        components.add(standartFigure);
      }
      if (figure.getFirstChild().getTextContent().equals("Line")) {
        NodeList nodes = figure.getChildNodes();
        for (int j = 0; j < nodes.getLength(); j++) {
          if (nodes.item(j).getNodeName().equals("X"))
            x = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Y"))
            y = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Width"))
            width = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Height"))
            height = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("BoundColor")) {
            NodeList rgb = nodes.item(j).getChildNodes();
            color =
                new Color(
                    Integer.parseInt(rgb.item(0).getTextContent()),
                    Integer.parseInt(rgb.item(1).getTextContent()),
                    Integer.parseInt(rgb.item(2).getTextContent()));
          }
        }
        standartFigure = new StandartFigure(TypeFigure.Line, new Point(x, y));
        standartFigure.setDimension(width, height);
        standartFigure.setLocation(new Point(x, y));
        standartFigure.setColor(color);
        components.add(standartFigure);
      }
      if (figure.getFirstChild().getTextContent().equals("RoundRect")) {
        NodeList nodes = figure.getChildNodes();
        for (int j = 0; j < nodes.getLength(); j++) {
          if (nodes.item(j).getNodeName().equals("X"))
            x = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Y"))
            y = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Width"))
            width = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("Height"))
            height = Integer.parseInt(nodes.item(j).getTextContent());
          if (nodes.item(j).getNodeName().equals("BoundColor")) {
            NodeList rgb = nodes.item(j).getChildNodes();
            color =
                new Color(
                    Integer.parseInt(rgb.item(0).getTextContent()),
                    Integer.parseInt(rgb.item(1).getTextContent()),
                    Integer.parseInt(rgb.item(2).getTextContent()));
          }
        }
        standartFigure = new StandartFigure(TypeFigure.RoundRect, new Point(x, y));
        standartFigure.setDimension(width, height);
        standartFigure.setLocation(new Point(x, y));
        standartFigure.setColor(color);
        components.add(standartFigure);
      }
    }
    return components;
  }