/* * Copyright (C) 2012 Jan Pokorsky * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package cz.cas.lib.proarc.webapp.client.widget; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DSCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.TextAreaWrap; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.TextAreaItem; import cz.cas.lib.proarc.webapp.client.ClientMessages; import cz.cas.lib.proarc.webapp.client.action.Action; import cz.cas.lib.proarc.webapp.client.action.ActionEvent; import cz.cas.lib.proarc.webapp.client.action.Actions; import cz.cas.lib.proarc.webapp.client.action.RefreshAction.Refreshable; import cz.cas.lib.proarc.webapp.client.action.SaveAction; import cz.cas.lib.proarc.webapp.client.action.Selectable; import cz.cas.lib.proarc.webapp.client.ds.DigitalObjectDataSource.DigitalObject; import cz.cas.lib.proarc.webapp.client.ds.RestConfig; import cz.cas.lib.proarc.webapp.client.ds.TextDataSource; /** * Edits plain/text data stream. * * @author Jan Pokorsky */ public final class TextEditor implements DatastreamEditor, Refreshable, Selectable<Record> { public static final String OCR_TYPE = "OCR"; public static final String NOTE_TYPE = "NOTE"; private final ClientMessages i18n; private final DynamicForm editor; private SaveAction saveAction; private DigitalObject editObject; private TextEditor(ClientMessages i18n, TextDataSource dataSource) { this.i18n = i18n; initActions(); this.editor = createForm(dataSource); } public static TextEditor ocr(ClientMessages i18n) { return new TextEditor(i18n, TextDataSource.getOcr()); } public static TextEditor note(ClientMessages i18n) { return new TextEditor(i18n, TextDataSource.getNote()); } @Override public void edit(DigitalObject digitalObject) { this.editObject = digitalObject; load(editObject); } @Override public void focus() { editor.focus(); } @Override public Canvas[] getToolbarItems() { return new Canvas[] { Actions.asIconButton(saveAction, this) }; } private Action[] initActions() { saveAction = new SaveAction(i18n) { @Override public void performAction(ActionEvent event) { Record r = editor.getValuesAsRecord(); editor.saveData(new DSCallback() { @Override public void execute(DSResponse response, Object rawData, DSRequest request) { if (RestConfig.isStatusOk(response)) { StatusView.getInstance().show(i18n.SaveAction_Done_Msg()); } } }); } }; return new Action[] {saveAction}; } @Override @SuppressWarnings("unchecked") public <T> T getCapability(Class<T> clazz) { T c = null; if (Refreshable.class.equals(clazz)) { c = (T) this; } return c; } @Override public Record[] getSelection() { Record r = editor.getValuesAsRecord(); return new Record[] { r }; } @Override public Canvas getUI() { return editor; } @Override public void refresh() { load(editObject); } private void load(DigitalObject digitalObject) { if (digitalObject != null) { Criteria criteria = new Criteria(TextDataSource.FIELD_PID, digitalObject.getPid()); if (digitalObject.getBatchId() != null) { criteria.addCriteria(TextDataSource.FIELD_BATCHID, digitalObject.getBatchId()); } editor.fetchData(criteria); } } private DynamicForm createForm(TextDataSource dataSource) { DynamicForm form = new DynamicForm(); form.setDataSource(dataSource); form.setWidth100(); form.setHeight100(); TextAreaItem textAreaItem = new TextAreaItem(TextDataSource.FIELD_CONTENT); textAreaItem.setColSpan("*"); textAreaItem.setHeight("*"); textAreaItem.setWrap(TextAreaWrap.OFF); textAreaItem.setShowTitle(false); textAreaItem.setWidth("*"); form.setFields(textAreaItem); return form; } }