/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.alkacon.opencms.v8.calendar.client.widget;
import com.alkacon.opencms.v8.calendar.shared.rpc.I_CmsSerialDateService;
import com.alkacon.opencms.v8.calendar.shared.rpc.I_CmsSerialDateServiceAsync;
import com.alkacon.vie.client.Entity;
import org.opencms.ade.contenteditor.client.CmsContentEditor;
import org.opencms.ade.contenteditor.client.I_CmsEntityChangeListener;
import org.opencms.ade.contenteditor.client.widgets.CmsSelectWidget;
import org.opencms.ade.contenteditor.shared.CmsContentDefinition;
import org.opencms.gwt.client.CmsCoreProvider;
import org.opencms.gwt.client.rpc.CmsRpcAction;
import org.opencms.gwt.client.util.CmsDebugLog;
import org.opencms.util.CmsStringUtil;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
/**
* Provides a DHTML calendar widget, for use on a widget dialog.<p>
*
* */
public class CmsSerialDateSelectWidget extends CmsSelectWidget {
/** Test */
private static I_CmsSerialDateServiceAsync SERVICE;
/** The String of select configuration. */
String m_selectValues = "";
/** The entry count. */
private int m_entryCount;
/** The locale. */
private String m_locale;
/** The set value.*/
private String m_value;
/**
* Constructs an CmsComboWidget with the in XSD schema declared configuration.<p>
* @param config The configuration string given from OpenCms XSD.
*/
public CmsSerialDateSelectWidget(String config) {
super("");
String[] configs = config.split(";");
m_entryCount = Integer.parseInt(configs[0]);
m_locale = configs[1];
getNewValues(CmsContentDefinition.getValueForPath(CmsContentEditor.getEntity(), "Serialdate"));
CmsContentEditor.addEntityChangeListener(new I_CmsEntityChangeListener() {
public void onEntityChange(Entity entity) {
getNewValues(CmsContentDefinition.getValueForPath(entity, "Serialdate"));
}
}, "Serialdate");
}
/**
* Returns the long value of the given String or the default value if parsing the String fails.<p>
*
* @param strValue the String to parse
* @param defaultValue the default value to use if parsing fails
* @return the long value of the given String
*/
protected static long getLongValue(String strValue, long defaultValue) {
long result = defaultValue;
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(strValue)) {
try {
result = Long.parseLong(strValue);
} catch (NumberFormatException e) {
// no number, use default value
}
}
return result;
}
/**
* @see org.opencms.ade.contenteditor.client.widgets.CmsSelectWidget#setValue(java.lang.String, boolean)
*/
@Override
public void setValue(String value, boolean fireEvents) {
if (!m_selectBox.getItems().containsKey(value)) {
Map<String, String> val = new HashMap<String, String>();
val.put(value, value);
m_selectBox.setItems(val);
}
super.setValue(value, fireEvents);
m_value = value;
}
/**
* @see org.opencms.ade.contenteditor.client.widgets.CmsSelectWidget#fireChangeEvent()
*/
@Override
public void fireChangeEvent() {
m_value = m_selectBox.getFormValueAsString();
ValueChangeEvent.fire(this, m_selectBox.getFormValueAsString());
}
/**
* Checks if the select values have to be change.<p>
*
* @param serialDateValue the serial date widget value
* */
protected void getNewValues(String serialDateValue) {
if (!m_selectValues.equals(serialDateValue)) {
m_selectValues = serialDateValue;
if (!m_selectValues.isEmpty()) {
generateNewSelection(m_selectValues);
}
}
}
/**
* Returns the container-page RPC service.<p>
*
* @return the container-page service
*/
protected I_CmsSerialDateServiceAsync getService() {
if (SERVICE == null) {
SERVICE = GWT.create(I_CmsSerialDateService.class);
String serviceUrl = CmsCoreProvider.get().link("com.alkacon.opencms.v8.calendar.CmsSerialDateService.gwt");
((ServiceDefTarget)SERVICE).setServiceEntryPoint(serviceUrl);
}
return SERVICE;
}
/**
* Updates the selection of this select box.<p>
* @param newValues Map of the select options
* */
protected void updateSelection(Map<String, String> newValues) {
m_selectBox.setItems(newValues);
CmsDebugLog.getInstance().printLine("m_value= " + m_value);
CmsDebugLog.getInstance().printLine("newValues contains: " + m_value + " = " + newValues.containsKey(m_value));
if (newValues.containsKey(m_value)) {
setValue(m_value);
} else {
setValue("");
}
}
/**
* Generates the new select values an sets them.<p>
* @param selectValues the values to be selected
*
* */
private void generateNewSelection(String selectValues) {
// generate a list of all configured categories.
final String locale = m_locale;
final String values = selectValues;
final int entryCount = m_entryCount;
// start request
CmsRpcAction<Map<String, String>> action = new CmsRpcAction<Map<String, String>>() {
/**
* @see org.opencms.gwt.client.rpc.CmsRpcAction#onResponse(java.lang.Object)
*/
@Override
public void execute() {
getService().getSeriaDateSelection(values, locale, entryCount, this);
}
/**
* @see org.opencms.gwt.client.rpc.CmsRpcAction#onResponse(java.lang.Object)
*/
@Override
protected void onResponse(Map<String, String> result) {
updateSelection(result);
}
};
action.execute();
}
}