es.upm.fi.dia.oeg.map4rdf.client.widget.GeoResourceSummary.java Source code

Java tutorial

Introduction

Here is the source code for es.upm.fi.dia.oeg.map4rdf.client.widget.GeoResourceSummary.java

Source

/**
 * Copyright (c) 2011 Alexander De Leon Battista
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package es.upm.fi.dia.oeg.map4rdf.client.widget;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Cursor;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.InlineHTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

import net.customware.gwt.dispatch.client.DispatchAsync;
import net.customware.gwt.presenter.client.EventBus;
import es.upm.fi.dia.oeg.map4rdf.client.action.GetMultipleConfigurationParameters;
import es.upm.fi.dia.oeg.map4rdf.client.action.GetMultipleConfigurationParametersResult;
import es.upm.fi.dia.oeg.map4rdf.client.conf.ConfIDInterface;
import es.upm.fi.dia.oeg.map4rdf.client.event.BufferSetPointEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.CloseMapMainPopupEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.DashboardDoSelectedResultWidgetEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.EditResourceEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.OnSelectedConfiguration;
import es.upm.fi.dia.oeg.map4rdf.client.event.OnSelectedConfigurationHandler;
import es.upm.fi.dia.oeg.map4rdf.client.event.ResultWidgetAddEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.ResultWidgetDoSelectedEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.ResultWidgetRemoveEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.RoutesAddPointEvent;
import es.upm.fi.dia.oeg.map4rdf.client.event.StatisticsSummaryEvent;
import es.upm.fi.dia.oeg.map4rdf.client.resource.BrowserMessages;
import es.upm.fi.dia.oeg.map4rdf.client.resource.BrowserResources;
import es.upm.fi.dia.oeg.map4rdf.client.util.AdditionalInfoExecuter;
import es.upm.fi.dia.oeg.map4rdf.client.util.AdditionalInfoExecuter.InfoCallback;
import es.upm.fi.dia.oeg.map4rdf.client.util.AdditionalInfoSummary;
import es.upm.fi.dia.oeg.map4rdf.client.util.GeoUtils;
import es.upm.fi.dia.oeg.map4rdf.client.util.ParametersSummaryMove;
import es.upm.fi.dia.oeg.map4rdf.client.util.RoutesAddGeoResourceType;
import es.upm.fi.dia.oeg.map4rdf.client.util.WidgetsNames;
import es.upm.fi.dia.oeg.map4rdf.share.GeoResource;
import es.upm.fi.dia.oeg.map4rdf.share.Geometry;
import es.upm.fi.dia.oeg.map4rdf.share.MapShape;
import es.upm.fi.dia.oeg.map4rdf.share.conf.ParameterNames;
import es.upm.fi.dia.oeg.map4rdf.share.conf.SharedGeometryModels;

/**
 * @author Alexander De Leon
 * Adapted by: @author Francisco Siles
 */
public class GeoResourceSummary extends Composite {

    private final ConfIDInterface configID;
    private BrowserMessages messages;
    private BrowserResources resources;
    private WidgetFactory widgetFactory;
    private GeoResource lastGeoResource;
    private Geometry lastGeometry;
    private EventBus eventBus;
    private GeoResourceSummaryInfo summary;
    private final int intSizeImages = 35;
    private final String sizeImages = intSizeImages + "px";
    private final int intSizeAllTable = intSizeImages * 3;
    private final String sizeAllTable = intSizeAllTable + "px";//sizeImages*3
    private final int widgetDistance = 3;//distance between widgets
    private Panel mainPanel;
    private ArrayList<Widget> allWidgetInOrder;
    private Map<String, Widget> allWidgetsWithName;
    private ParametersSummaryMove parametersSummary;
    private SummaryMove summaryMove;
    private Widget routesWidget;
    private Widget bufferWidget;
    private Widget infoWidget;
    private Widget editWidget;
    private Widget statisticsWidget;
    private Anchor twitterAnchor;
    private Anchor rdfAnchor;
    private Widget wikipediaResultWidget;
    private Widget wikipediaWidget;
    private String twitterURL;
    private String wikipediaParseURL = GWT.getModuleBaseURL() + "parseWikipedia?URL=";
    private Map<String, String> additionalsInfo;
    private DispatchAsync dispatchAsync;
    private Panel centerPanel;
    /*If you modify this constant remember to modify GeoResourceSummary.getPointVisualization()
     * the widgets need to be in the same order that this constant and the same length*/
    public final String SUMMARY_WIDGETS_NAMES = WidgetsNames.ALL_IN_ORDER;
    private int moveType;

    public GeoResourceSummary(ConfIDInterface configID, DispatchAsync dispatchAsync, EventBus eventBus,
            BrowserMessages messages, BrowserResources appResources, WidgetFactory widgetFactory) {
        this.configID = configID;
        this.messages = messages;
        this.resources = appResources;
        this.eventBus = eventBus;
        this.widgetFactory = widgetFactory;
        allWidgetsWithName = new HashMap<String, Widget>();
        allWidgetInOrder = new ArrayList<Widget>();
        this.dispatchAsync = dispatchAsync;
        if (configID.existsConfigID()) {
            initAsync();
        } else {
            eventBus.addHandler(OnSelectedConfiguration.getType(), new OnSelectedConfigurationHandler() {

                @Override
                public void onSelectecConfiguration(String configID) {
                    initAsync();
                }
            });
        }

        initWidget(createUi());
    }

    private void initAsync() {
        List<String> parameters = new ArrayList<String>();
        parameters.add(ParameterNames.SUMMARY_WIDGETS);
        parameters.add(ParameterNames.TWITTER_STATUS_URL);
        parameters.add(ParameterNames.GEOMETRY_MODEL);
        dispatchAsync.execute(new GetMultipleConfigurationParameters(configID.getConfigID(), parameters),
                new AsyncCallback<GetMultipleConfigurationParametersResult>() {

                    @Override
                    public void onFailure(Throwable caught) {
                        GeoResourceSummary.this.widgetFactory.getDialogBox().showError(
                                GeoResourceSummary.this.messages.moduleCantContactWithServer("GeoResourceSummary"));
                        initAsync(null);
                    }

                    @Override
                    public void onSuccess(GetMultipleConfigurationParametersResult result) {
                        String summaryWidgets = result.getResults().get(ParameterNames.SUMMARY_WIDGETS);
                        if (summaryWidgets == null || summaryWidgets.isEmpty()) {
                            GeoResourceSummary.this.widgetFactory.getDialogBox()
                                    .showError(GeoResourceSummary.this.messages
                                            .configParameterNullOrEmpty(ParameterNames.SUMMARY_WIDGETS));
                            initAsync(null);
                        } else {
                            initAsync(summaryWidgets.toLowerCase());
                        }
                        String twitter = result.getResults().get(ParameterNames.TWITTER_STATUS_URL);
                        if (twitter != null && !twitter.isEmpty()) {
                            twitterURL = twitter;
                        } else {
                            GeoResourceSummary.this.widgetFactory.getDialogBox()
                                    .showError(GeoResourceSummary.this.messages
                                            .configParameterNullOrEmpty(ParameterNames.TWITTER_STATUS_URL));
                        }
                        String geometryModel = result.getResults().get(ParameterNames.GEOMETRY_MODEL);
                        if (geometryModel != null && !geometryModel.isEmpty()) {
                            summary = getSummary(geometryModel);
                        } else {
                            GeoResourceSummary.this.widgetFactory.getDialogBox()
                                    .showError(GeoResourceSummary.this.messages
                                            .configParameterNullOrEmpty(ParameterNames.GEOMETRY_MODEL));
                        }
                    }
                });
    }

    public void setGeoResource(final GeoResource resource, Geometry geometry) {
        //TODO Analyze if it is easy to implement closeProperSummary depend on configuration param.
        openOrCloseSummary(false);
        lastGeoResource = resource;
        lastGeometry = geometry;
        centerPanel.clear();
        centerPanel.add(getCenterImage());

        AdditionalInfoExecuter.cancelAllCallbacks();
        AdditionalInfoExecuter.getAdditionalInfo(configID.getConfigID(), dispatchAsync, resource,
                new InfoCallback() {
                    @Override
                    public void success(AdditionalInfoSummary additionalInfo) {
                        summary.clearAdditionalInfo();
                        additionalsInfo = additionalInfo.getAdditionalInfo();
                        if (additionalInfo.haveImage()) {
                            centerPanel.clear();
                            Image image = new Image(GWT.getModuleBaseURL() + additionalInfo.getImage());
                            image.getElement().getStyle().setCursor(Cursor.POINTER);
                            image.getElement().getStyle().setPosition(Position.ABSOLUTE);
                            image.addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent event) {
                                    close();
                                }
                            });
                            centerPanel.add(image);
                        }
                        summary.addAdditionalInfo(additionalsInfo);
                    }
                });
        if (wikipediaResultWidget != null) {
            eventBus.fireEvent(new ResultWidgetRemoveEvent(wikipediaResultWidget));
            wikipediaResultWidget = null;
        }
        if (GeoUtils.getCentroid(geometry) != null) {
            routesWidget.setVisible(true);
            bufferWidget.setVisible(true);
        } else {
            routesWidget.setVisible(false);
            bufferWidget.setVisible(false);
        }
        if (resource.getUri() != null) {
            infoWidget.setVisible(true);
            twitterAnchor.setVisible(true);
            twitterAnchor.setHref(twitterURL + URL.encode(resource.getUri()));
            rdfAnchor.setVisible(true);
            rdfAnchor.setHref(resource.getUri());
            editWidget.setVisible(true);
            statisticsWidget.setVisible(true);
            wikipediaWidget.setVisible(true);
        } else {
            editWidget.setVisible(false);
            twitterAnchor.setVisible(false);
            rdfAnchor.setVisible(false);
            wikipediaWidget.setVisible(false);
            if (geometry.getType() != MapShape.Type.POINT) {
                infoWidget.setVisible(false);
                statisticsWidget.setVisible(false);
            }
        }
        ArrayList<Widget> visibleWidget = new ArrayList<Widget>();
        for (int i = 0; i < allWidgetInOrder.size(); i++) {
            if (allWidgetInOrder.get(i).isVisible()) {
                visibleWidget.add(allWidgetInOrder.get(i));
            }
        }
        summaryMove.cancelMove();
        parametersSummary = initializeParametersSummary(visibleWidget.size(), moveType);
        summary.setGeoResource(resource, geometry);
        summaryMove = new SummaryMove(visibleWidget, parametersSummary, this);
        moveInitialPosition();
        summaryMove.startMoveWidgets();
    }

    public void moveLeftTopOfCenter(Widget widget, int left, int top) {
        int centerLeft = intSizeImages;
        int centerTop = intSizeImages;
        left = centerLeft + left;
        top = centerTop - top;
        widget.getElement().getStyle().setLeft(left, Unit.PX);
        widget.getElement().getStyle().setTop(top, Unit.PX);
    }

    private Widget createUi() {
        mainPanel = new FlowPanel();
        mainPanel.setSize(sizeAllTable, sizeAllTable);
        Image image = new Image(resources.summaryBackGround());
        image.setSize(sizeAllTable, sizeAllTable);
        mainPanel.getElement().getStyle().setProperty("background",
                image.getElement().getStyle().getBackgroundImage() + " no-repeat scroll 0px 0px transparent");
        mainPanel.add(centerPanel = getCenter());
        centerPanel.getElement().getStyle().setPosition(Position.ABSOLUTE);
        centerPanel.getElement().getStyle().setLeft(intSizeImages, Unit.PX);
        centerPanel.getElement().getStyle().setTop(intSizeImages, Unit.PX);
        return mainPanel;
    }

    private void initAsync(String summaryWidgets) {
        initPointVisualization();
        if (summaryWidgets != null && !summaryWidgets.isEmpty()) {
            String split[] = summaryWidgets.split(";");
            for (String i : summaryWidgets.split(";")) {
                if (allWidgetsWithName.containsKey(i)) {
                    Widget widget = allWidgetsWithName.get(i);
                    mainPanel.add(widget);
                    allWidgetInOrder.add(widget);
                }
                if (split[split.length - 1].toLowerCase().contains("type")) {
                    try {
                        String type[] = split[split.length - 1].split(":");
                        moveType = Integer.parseInt(type[type.length - 1]);
                    } catch (Exception e) {
                    }
                }
            }
        } else {
            for (Widget i : allWidgetsWithName.values()) {
                mainPanel.add(i);
                allWidgetInOrder.add(i);
            }
        }
        parametersSummary = initializeParametersSummary(allWidgetInOrder.size(), moveType);
        summaryMove = new SummaryMove(allWidgetInOrder, parametersSummary, this);
    }

    private Panel initPointVisualization() {
        Widget widget;
        /*This */
        /*To add new widget in the summary please
         * modify Constants.SUMMARY_WIDGETS_NAMES add the new name of the widget
         * and add the widget in the same order this appear in Constants.SUMMARY_WIDGETS_NAMES;*/
        String summaryArrayWidgets[] = SUMMARY_WIDGETS_NAMES.split(";");
        int i = 0;
        widget = getInfo();
        infoWidget = widget;
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getWikipedia();
        wikipediaWidget = widget;
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getSetToBuffer();
        bufferWidget = widget;
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getTwitter();
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getClose();
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getEdit();
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getAddToRoutes();
        routesWidget = widget;
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getRDF();
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        widget = getStatistics();
        statisticsWidget = widget;
        allWidgetsWithName.put(summaryArrayWidgets[i++], widget);
        widget.getElement().getStyle().setPosition(Position.ABSOLUTE);

        return mainPanel;
    }

    private Widget getStatistics() {
        Image image = new Image(resources.statsSummaryIcon());
        image.setSize(sizeImages, sizeImages);
        image.setTitle(messages.statistics());
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                openPopupStatisticsView();
            }
        });
        return image;
    }

    private Widget getInfo() {
        Image image = new Image(resources.infoIcon());
        image.setSize(sizeImages, sizeImages);
        image.setTitle(messages.infoResource());
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                openOrCloseSummary(!summary.isVisible());
            }
        });
        return image;
    }

    private Widget getWikipedia() {
        Image image = new Image(resources.wikipediaIcon());
        image.setSize(sizeImages, sizeImages);
        image.setTitle(messages.wikipediaTitle());
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                revealWikipedia();
            }
        });
        return image;
    }

    private Widget getEdit() {
        Image image = new Image(resources.editIcon());
        image.setSize(sizeImages, sizeImages);
        image.setTitle(messages.edit());
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                EditResourceEvent editEvent = new EditResourceEvent(lastGeoResource.getUri());
                eventBus.fireEvent(editEvent);
            }
        });
        editWidget = image;
        return editWidget;
    }

    private Widget getRDF() {
        rdfAnchor = new Anchor();
        rdfAnchor.setSize(sizeImages, sizeImages);
        Image image = new Image(resources.rdfIcon());
        image.setSize(sizeImages, sizeImages);
        rdfAnchor.setTitle(messages.rdfTitle());
        rdfAnchor.getElement().appendChild(image.getElement());
        rdfAnchor.setTarget("_blank");
        return rdfAnchor;
    }

    private GeoResourceSummaryInfo getSummary(String geometryModel) {
        if (SharedGeometryModels.AEMET.equalsIgnoreCase(geometryModel)) {
            return new GeoResourceSummaryInfoAemet(configID, dispatchAsync, resources, messages, widgetFactory);
        }
        if (SharedGeometryModels.VIAJERO.equalsIgnoreCase(geometryModel)) {
            return new GeoResourceSummaryInfoViajero(configID, dispatchAsync, eventBus, resources, messages);
        }
        return new GeoResourceSummaryInfoDefault(messages, resources);
    }

    private Widget getAddToRoutes() {
        Image image = new Image(resources.routesIcon());
        image.setSize(sizeImages, sizeImages);
        image.setTitle(messages.addToRoutes());
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                addToRoute();
            }
        });
        return image;
    }

    private Widget getSetToBuffer() {
        Image image = new Image(resources.bufferIcon());
        image.setSize(sizeImages, sizeImages);
        image.setTitle(messages.setToBuffer());
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                setToBuffer();
            }
        });
        return image;
    }

    private Panel getCenter() {
        FlowPanel panel = new FlowPanel();
        panel.setSize(sizeImages, sizeImages);
        panel.add(getCenterImage());
        return panel;
    }

    private Widget getCenterImage() {
        Image image = new Image(resources.transparentImage());
        image.setSize(sizeImages, sizeImages);
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                close();
            }
        });
        return image;
    }

    private Widget getTwitter() {
        twitterAnchor = new Anchor();
        twitterAnchor.setSize(sizeImages, sizeImages);
        Image image = new Image(resources.twitterIcon());
        image.setSize(sizeImages, sizeImages);
        twitterAnchor.setTitle(messages.twitterTitle());
        twitterAnchor.getElement().appendChild(image.getElement());
        twitterAnchor.setTarget("_blank");
        return twitterAnchor;
    }

    private Widget getClose() {
        Image image = new Image(resources.closeIcon());
        image.setSize(sizeImages, sizeImages);
        image.setTitle(messages.close());
        image.getElement().getStyle().setCursor(Cursor.POINTER);
        image.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                close();
            }
        });
        return image;
    }

    private void revealWikipedia() {
        if (wikipediaResultWidget != null) {
            eventBus.fireEvent(new ResultWidgetRemoveEvent(wikipediaResultWidget));
            wikipediaResultWidget = null;
        }
        if (!lastGeoResource.getWikipediaURL().isEmpty()) {
            String wikipediaURL = lastGeoResource.getWikipediaURL().iterator().next();
            VerticalPanel panel = new VerticalPanel();
            Anchor anchor = new Anchor(messages.wikipediaTitle(), wikipediaURL);
            anchor.setTarget("_blank");
            panel.add(anchor);
            ScrollPanel scroll = new ScrollPanel(new InlineHTML("<iframe src=\"" + wikipediaParseURL + wikipediaURL
                    + "\" style=\"width: 97%; height:" + String.valueOf(Window.getClientHeight() - 400) + "px\">"));
            panel.add(scroll);
            wikipediaResultWidget = panel;
        } else {
            VerticalPanel panel = new VerticalPanel();
            panel.add(new Label(messages.wikipediaNotFound()));
            wikipediaResultWidget = panel;
        }
        eventBus.fireEvent(new ResultWidgetAddEvent(wikipediaResultWidget, messages.wikipedia()));
        eventBus.fireEvent(new ResultWidgetDoSelectedEvent(wikipediaResultWidget));
        eventBus.fireEvent(new DashboardDoSelectedResultWidgetEvent());
    }

    private void addToRoute() {
        eventBus.fireEvent(
                new RoutesAddPointEvent(lastGeoResource, lastGeometry, RoutesAddGeoResourceType.OtherPopup));
    }

    private void setToBuffer() {
        eventBus.fireEvent(new BufferSetPointEvent(lastGeoResource, lastGeometry));
    }

    private void close() {
        //TODO Analyze if it is easy to implement closeProperSummary depend on configuration param.
        closeProperSummary();
        if (wikipediaResultWidget != null) {
            eventBus.fireEvent(new ResultWidgetRemoveEvent(wikipediaResultWidget));
            wikipediaResultWidget = null;
        }
        eventBus.fireEvent(new CloseMapMainPopupEvent());
    }

    private void openPopupStatisticsView() {
        eventBus.fireEvent(new StatisticsSummaryEvent(true, lastGeoResource));
    }

    public void closeSummary() {
        openOrCloseSummary(false);
    }

    private void openOrCloseSummary(boolean openOrClose) {
        if (openOrClose) {
            openProperSummary();
        } else {
            closeProperSummary();
        }
    }

    private void openProperSummary() {
        if (!summary.isVisible()) {
            summary.show();
        }
    }

    private void closeProperSummary() {
        if (summary.isVisible()) {
            summary.close();
        }
    }

    private void moveInitialPosition() {
        summaryMove.moveToInitialPosition();
    }

    private ParametersSummaryMove initializeParametersSummary(int widgetsSize, int moveType) {
        if (widgetsSize == 0) {
            widgetsSize = 1;
        }
        final int parameter = (int) ((int) (104 / widgetsSize)) * widgetsSize;
        final int firtsTotalTime = parameter * 3;
        final int secondTotalTime = parameter;
        final int steps = parameter;
        final int diffSteps = 10;
        final int diffSpecialSteps = steps / widgetsSize;//procure that the division have a int result.
        int radiousPX = (int) (((intSizeImages + widgetDistance) * widgetsSize) / (2 * Math.PI));
        if (radiousPX < intSizeImages) {
            radiousPX = intSizeImages;
        }
        return new ParametersSummaryMove(firtsTotalTime, secondTotalTime, steps, diffSteps, diffSpecialSteps,
                radiousPX, intSizeImages, widgetDistance, moveType);
    }

}