/**
* Copyright 2013 European Parliament
*
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://joinup.ec.europa.eu/software/page/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and limitations under the Licence.
*/
package org.nsesa.editor.gwt.an.amendments.client.ui.amendment.action;
import com.google.gwt.core.client.GWT;
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.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.*;
import com.google.inject.Inject;
import org.nsesa.editor.gwt.amendment.client.event.amendment.AmendmentContainerSaveEvent;
import org.nsesa.editor.gwt.amendment.client.ui.amendment.action.AmendmentActionPanelController;
import org.nsesa.editor.gwt.amendment.client.ui.amendment.action.AmendmentActionPanelView;
import org.nsesa.editor.gwt.an.amendments.client.ui.amendment.action.resources.Constants;
import org.nsesa.editor.gwt.compare.client.event.ShowComparePanelEvent;
import org.nsesa.editor.gwt.compare.client.ui.compare.ComparisonProvider;
import org.nsesa.editor.gwt.core.client.ClientFactory;
import org.nsesa.editor.gwt.core.client.ServiceFactory;
import org.nsesa.editor.gwt.core.client.event.CriticalErrorEvent;
import org.nsesa.editor.gwt.core.client.ui.i18n.CoreMessages;
import org.nsesa.editor.gwt.core.shared.AmendmentContainerDTO;
import org.nsesa.editor.gwt.core.shared.RevisionDTO;
import java.util.ArrayList;
import java.util.List;
/**
* Date: 06/02/13 16:19
*
* @author <a href="mailto:philip.luppens@gmail.com">Philip Luppens</a>
* @version $Id$
*/
public class AkomaNtoso20AmendmentActionPanelController extends AmendmentActionPanelController {
private final PopupPanel exportPopupPanel = new DecoratedPopupPanel(false, false) {
{
setGlassEnabled(true);
}
};
private final FlowPanel mainPanel = new FlowPanel();
private final HorizontalPanel buttonPanel = new HorizontalPanel();
private final Button closeButton = new Button("Close");
private final ScrollPanel scrollPanel = new ScrollPanel();
private final HTML content = new HTML();
@Inject
public AkomaNtoso20AmendmentActionPanelController(final AmendmentActionPanelView amendmentActionPanelView,
final CoreMessages coreMessages, final Constants constants) {
super(amendmentActionPanelView, coreMessages);
this.exportPopupPanel.setWidget(mainPanel);
this.mainPanel.setHeight("600px");
this.mainPanel.setWidth("800px");
this.mainPanel.add(scrollPanel);
buttonPanel.setWidth("800px");
buttonPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
this.mainPanel.add(buttonPanel);
buttonPanel.add(closeButton);
this.scrollPanel.setHeight("570px");
this.scrollPanel.setWidth("100%");
this.scrollPanel.setWidget(content);
this.content.setHeight("100%");
this.content.setWidth("100%");
closeButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
exportPopupPanel.hide();
}
});
final Anchor history = new Anchor(constants.amendmentActionHistory());
history.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
final ServiceFactory serviceFactory = amendmentController.getDocumentController().getServiceFactory();
final ClientFactory clientFactory = amendmentController.getDocumentController().getClientFactory();
final ComparisonProvider comparisonProvider = new ComparisonProvider() {
@Override
public void getRevisionContent(final String revisionID, final AsyncCallback<String> asyncCallback) {
serviceFactory.getGwtAmendmentService().getAmendmentContainerRevision(clientFactory.getClientContext(), revisionID, new AsyncCallback<AmendmentContainerDTO>() {
@Override
public void onFailure(final Throwable caught) {
asyncCallback.onFailure(caught);
}
@Override
public void onSuccess(final AmendmentContainerDTO result) {
// wrap in a span to correct the rendering via amendment.css
final Element span = DOM.createSpan();
span.setInnerHTML(result.getBody());
final String body = "<div class='amendmentHolder'><div>" + span.getFirstChildElement() + "</div></div>";
asyncCallback.onSuccess(body);
}
});
}
@Override
public void getRevisions(final AsyncCallback<List<RevisionDTO>> asyncCallback) {
serviceFactory.getGwtAmendmentService().getRevisions(clientFactory.getClientContext(), amendmentController.getModel().getId(), new AsyncCallback<ArrayList<RevisionDTO>>() {
@Override
public void onFailure(final Throwable caught) {
asyncCallback.onFailure(caught);
}
@Override
public void onSuccess(final ArrayList<RevisionDTO> result) {
asyncCallback.onSuccess(result);
}
});
}
@Override
public void rollback(final String revisionID) {
serviceFactory.getGwtAmendmentService().getAmendmentContainerRevision(clientFactory.getClientContext(), revisionID, new AsyncCallback<AmendmentContainerDTO>() {
@Override
public void onFailure(Throwable caught) {
clientFactory.getEventBus().fireEvent(new CriticalErrorEvent("Could not rollback revision: " + caught.getMessage(), caught));
}
@Override
public void onSuccess(AmendmentContainerDTO result) {
// force an update of the revision ID to let the backend know we're aware of the latest version
result.setRevisionID(amendmentController.getModel().getRevisionID());
amendmentController.getDocumentController().getDocumentEventBus().fireEvent(new AmendmentContainerSaveEvent(result));
popupPanel.hide();
}
});
}
};
amendmentController.getDocumentController().getClientFactory().getEventBus().fireEvent(new ShowComparePanelEvent(amendmentController.getDocumentController(), comparisonProvider));
popupPanel.hide();
}
});
// TODO not finished yet (needs extraction of the amendment text).
addSeparator();
addWidget(history);
final Anchor xmlExport = new Anchor(constants.amendmentActionExportXml());
xmlExport.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
final String url = GWT.getModuleBaseURL() + "download/amendment/xml/" + amendmentController.getModel().getId();
Window.open(URL.encode(url), "download", "");
popupPanel.hide();
}
});
final Anchor pdfExport = new Anchor(constants.amendmentActionExportPdf());
pdfExport.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
final String url = GWT.getModuleBaseURL() + "download/amendment/pdf/" + amendmentController.getModel().getId();
Window.open(URL.encode(url), "download", "");
popupPanel.hide();
}
});
final Anchor wordExport = new Anchor(constants.amendmentActionExportWord());
wordExport.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
final String url = GWT.getModuleBaseURL() + "download/amendment/word/" + amendmentController.getModel().getId();
Window.open(URL.encode(url), "download", "");
popupPanel.hide();
}
});
final Anchor htmlExport = new Anchor(constants.amendmentActionExportHtml());
htmlExport.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
final String url = GWT.getModuleBaseURL() + "download/amendment/html/" + amendmentController.getModel().getId();
Window.open(URL.encode(url), "download", "");
popupPanel.hide();
}
});
addSeparator();
addWidget(xmlExport);
addWidget(pdfExport);
addWidget(wordExport);
addWidget(htmlExport);
}
}