/** * 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.handler.modify; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.inject.Inject; import org.nsesa.editor.gwt.amendment.client.amendment.AmendmentInjectionPointFinder; import org.nsesa.editor.gwt.an.amendments.client.AmendmentOverlayWidgetValidator; import org.nsesa.editor.gwt.an.amendments.client.handler.common.content.AkomaNtoso20AmendmentBuilder; import org.nsesa.editor.gwt.an.amendments.client.handler.common.content.AkomaNtoso30AmendmentBuilder; import org.nsesa.editor.gwt.an.amendments.client.ui.amendment.AkomaNtosoAmendmentControllerUtil; import org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.akomantoso20.*; import org.nsesa.editor.gwt.core.client.ClientFactory; import org.nsesa.editor.gwt.core.client.ServiceFactory; import org.nsesa.editor.gwt.core.client.ui.overlay.Locator; import org.nsesa.editor.gwt.core.client.ui.overlay.document.OverlayFactory; import org.nsesa.editor.gwt.core.client.ui.overlay.document.OverlayWidget; import org.nsesa.editor.gwt.core.client.ui.visualstructure.VisualStructureController; import org.nsesa.editor.gwt.core.client.util.OverlayUtil; import org.nsesa.editor.gwt.core.shared.PersonDTO; import org.nsesa.editor.gwt.dialog.client.ui.dialog.DialogContext; import org.nsesa.editor.gwt.dialog.client.ui.handler.common.authors.AuthorsPanelController; import org.nsesa.editor.gwt.dialog.client.ui.handler.common.content.ContentPanelController; import org.nsesa.editor.gwt.dialog.client.ui.handler.common.meta.MetaPanelController; import org.nsesa.editor.gwt.dialog.client.ui.handler.modify.AmendmentDialogModifyController; import org.nsesa.editor.gwt.dialog.client.ui.handler.modify.AmendmentDialogModifyView; import java.util.List; import java.util.logging.Logger; /** * Date: 23/11/12 10:14 * * @author <a href="mailto:philip.luppens@gmail.com">Philip Luppens</a> * @version $Id$ */ public class AkomaNtosoAmendmentDialogModifyController extends AmendmentDialogModifyController { private static final Logger LOG = Logger.getLogger(AkomaNtosoAmendmentDialogModifyController.class.getName()); final AuthorsPanelController authorsPanelController; final MetaPanelController metaPanelController; final ContentPanelController contentPanelController; final ServiceFactory serviceFactory; @Inject public AkomaNtosoAmendmentDialogModifyController(final ClientFactory clientFactory, final AmendmentDialogModifyView view, final Locator locator, final OverlayFactory overlayFactory, final VisualStructureController visualStructureController, final AuthorsPanelController authorsPanelController, final ContentPanelController contentPanelController, final MetaPanelController metaPanelController, final ServiceFactory serviceFactory, final AmendmentInjectionPointFinder amendmentInjectionPointFinder, final AmendmentOverlayWidgetValidator validator ) { super(clientFactory, view, locator, overlayFactory, visualStructureController, amendmentInjectionPointFinder, validator); this.authorsPanelController = authorsPanelController; this.authorsPanelController.registerListeners(); this.contentPanelController = contentPanelController; this.contentPanelController.registerListeners(); this.metaPanelController = metaPanelController; this.metaPanelController.registerListeners(); this.serviceFactory = serviceFactory; addChildControllers(contentPanelController, authorsPanelController, metaPanelController); } @Override public void handleSave() { final OverlayWidget overlayWidget = dialogContext.getOverlayWidget(); final String languageIso = dialogContext.getDocumentController().getDocument().getLanguageIso(); final OverlayWidget amendment; if (overlayWidget.getNamespaceURI().equals(new AkomaNtoso().getNamespaceURI())) { final AkomaNtoso20AmendmentBuilder akomaNtoso20AmendmentBuilder = new AkomaNtoso20AmendmentBuilder(overlayFactory); akomaNtoso20AmendmentBuilder .setOverlayWidget(overlayWidget) .setDocumentController(dialogContext.getDocumentController()) .setLanguageIso(languageIso) .setAuthors(authorsPanelController.getSelectedPersons()) .setLocation(locator.getLocation(overlayWidget, languageIso, true)) .setOriginalText(contentPanelController.getView().getOriginalText()) .setAmendmentText(view.getAmendmentContent()) .setModifyIds(true) .setJustification(metaPanelController.getJustification()) .setNotes(metaPanelController.getNotes()); amendment = akomaNtoso20AmendmentBuilder.build(); } else { final AkomaNtoso30AmendmentBuilder akomaNtoso30AmendmentBuilder = new AkomaNtoso30AmendmentBuilder(overlayFactory); akomaNtoso30AmendmentBuilder .setOverlayWidget(overlayWidget) .setDocumentController(dialogContext.getDocumentController()) .setLanguageIso(languageIso) .setAuthors(authorsPanelController.getSelectedPersons()) .setLocation(locator.getLocation(overlayWidget, languageIso, true)) .setOriginalText(contentPanelController.getView().getOriginalText()) .setAmendmentText(view.getAmendmentContent()) .setModifyIds(true) .setJustification(metaPanelController.getJustification()) .setNotes(metaPanelController.getNotes()); amendment = akomaNtoso30AmendmentBuilder.build(); } dialogContext.getAmendment().setRoot(amendment); super.handleSave(); } @Override public void setContext(DialogContext dialogContext) { super.setContext(dialogContext); // clear author panel authorsPanelController.clear(); // clear meta panel metaPanelController.clear(); view.getRichTextEditor().setOverlayWidget(dialogContext.getOverlayWidget()); if (dialogContext.getAmendmentController() != null) { // get the location from the amendable widget, if it is passed view.setTitle("Edit amendment"); // set the amendment content final OverlayWidget amendmentBodyOverlayWidget = dialogContext.getAmendmentController().asAmendableWidget(dialogContext.getAmendmentController().getModel().getBody()); final OverlayWidget amendmentContentFromModel = AkomaNtosoAmendmentControllerUtil.getAmendmentContentFromModel(dialogContext.getAmendmentController()); String content = amendmentContentFromModel.getInnerHTML(); final OverlayWidget amendmentOverlayWidget = dialogContext.getAmendmentController().asAmendableWidget(content); view.setAmendmentContent(amendmentOverlayWidget.getInnerHTML()); // set the author(s) final Preface preface = (Preface) OverlayUtil.findSingle("preface", amendmentBodyOverlayWidget); final Container container = preface.getContainers().get(0); if (container != null && "authors".equals(container.nameAttr().getValue())) { final List<OverlayWidget> docProponents = OverlayUtil.find("docProponent", container); for (final OverlayWidget docProponent : docProponents) { if (docProponent instanceof DocProponent) { final DocProponent proponent = (DocProponent) docProponent; final String refersToID = proponent.refersToAttr().getValue(); final TLCPerson tlcPerson = (TLCPerson) OverlayUtil.xpathSingle(refersToID, amendmentBodyOverlayWidget); final String id = tlcPerson.hrefAttr().getValue().substring(tlcPerson.hrefAttr().getValue().lastIndexOf(":") + 1); serviceFactory.getGwtService().getPerson(clientFactory.getClientContext(), id, new AsyncCallback<PersonDTO>() { @Override public void onFailure(Throwable caught) { LOG.warning("Could not retrieve person: " + caught); } @Override public void onSuccess(PersonDTO result) { authorsPanelController.addPerson(result, docProponents.indexOf(docProponent)); } }); } } } // set the meta (justification, notes, ...) final AmendmentJustification amendmentJustification = (AmendmentJustification) OverlayUtil.findSingle("amendmentJustification", amendmentBodyOverlayWidget); if (amendmentJustification != null) { final String justification = amendmentJustification.getPs().get(0).getInnerHTML().trim(); metaPanelController.setJustification(justification); } final Mod mod = (Mod) OverlayUtil.findSingle("mod", amendmentBodyOverlayWidget); if (mod != null) { final List<AuthorialNote> authorialNotes = mod.getAuthorialNotes(); if (authorialNotes != null && !authorialNotes.isEmpty()) { metaPanelController.setNotes(authorialNotes.get(0).getPs().get(0).getInnerHTML().trim()); } } } else { view.setTitle(locator.getLocation(dialogContext.getOverlayWidget(), clientFactory.getClientContext().getDocumentTranslationLanguageCode(), false)); view.setAmendmentContent(dialogContext.getOverlayWidget().getInnerHTML()); } } }