/******************************************************************************* * Copyright (c) 2003, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jst.j2ee.internal.webservice.adapter; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jst.j2ee.internal.webservice.command.CommandModifyText; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.wst.common.componentcore.ArtifactEdit; public class AdapterExpiresCCombo extends AdapterImpl implements ModifyListener { private ArtifactEdit artifactEdit_; private EObject eObject_; private EStructuralFeature feature_; private CCombo year_; private CCombo month_; private CCombo day_; private CCombo hour_; private CCombo minute_; private CCombo second_; private CCombo msecond_; private boolean nillable_; public AdapterExpiresCCombo(ArtifactEdit artifactEdit, EStructuralFeature feature, CCombo year, CCombo month, CCombo day, CCombo hour, CCombo minute, CCombo second, CCombo msecond, boolean nillable) { super(); artifactEdit_ = artifactEdit; eObject_ = null; feature_ = feature; year_ = year; month_ = month; day_ = day; hour_ = hour; minute_ = minute; second_ = second; msecond_ = msecond; nillable_ = nillable; year_.addModifyListener(this); month_.addModifyListener(this); day_.addModifyListener(this); hour_.addModifyListener(this); minute_.addModifyListener(this); second_.addModifyListener(this); msecond_.addModifyListener(this); } public AdapterExpiresCCombo(ArtifactEdit artifactEdit, EObject eObject, EStructuralFeature feature, CCombo year, CCombo month, CCombo day, CCombo hour, CCombo minute, CCombo second, CCombo msecond, boolean nillable) { this(artifactEdit, feature, year, month, day, hour, minute, second, msecond, nillable); adapt(eObject); } @Override public void notifyChanged(Notification msg) { int type = msg.getEventType(); if ((type == Notification.SET || type == Notification.UNSET) && syncTextAndModel() && msg.getFeature() == feature_) setText(msg.getNewStringValue()); } public void modifyText(ModifyEvent e) { if (syncTextAndModel()) { CommandModifyText command = new CommandModifyText(null, null, eObject_, feature_, expires(), nillable_); artifactEdit_.getContentModelRoot().eResource().setModified(true); artifactEdit_.getCommandStack().execute(command); } } public String expires() { return "P" + //$NON-NLS-1$ year_.getText() + "Y" + //$NON-NLS-1$ month_.getText() + "M" + //$NON-NLS-1$ day_.getText() + "DT" + //$NON-NLS-1$ hour_.getText() + "H" + //$NON-NLS-1$ minute_.getText() + "M" + //$NON-NLS-1$ second_.getText() + "." + //$NON-NLS-1$ msecond_.getText() + "S"; //$NON-NLS-1$ } public void adapt(EObject eObject) { if (eObject_ != null) eObject_.eAdapters().remove(this); eObject_ = eObject; if (eObject_ != null) { eObject_.eAdapters().add(this); setText((String) eObject_.eGet(feature_)); } } public void adapt(EObject eObject, EStructuralFeature feature) { feature_ = feature; adapt(eObject); } public void dispose() { if (eObject_ != null) eObject_.eAdapters().remove(this); if (year_ != null && !year_.isDisposed()) year_.removeModifyListener(this); if (month_ != null && !month_.isDisposed()) month_.removeModifyListener(this); if (day_ != null && !day_.isDisposed()) day_.removeModifyListener(this); if (hour_ != null && !hour_.isDisposed()) hour_.removeModifyListener(this); if (minute_ != null && !minute_.isDisposed()) minute_.removeModifyListener(this); if (second_ != null && !second_.isDisposed()) second_.removeModifyListener(this); if (msecond_ != null && !msecond_.isDisposed()) msecond_.removeModifyListener(this); } private boolean syncTextAndModel() { if (eObject_ != null) { String modelValue = (String) eObject_.eGet(feature_); String value = expires(); if (modelValue == null || modelValue.length() <= 0) return !(value == null || value.length() <= 0); return !(modelValue.equals(value)); } return false; } private void setText(String modelValue) { if (modelValue != null) { int y = modelValue.indexOf("Y"); //$NON-NLS-1$ int mo = modelValue.indexOf("M"); //$NON-NLS-1$ int d = modelValue.indexOf("D"); //$NON-NLS-1$ int h = modelValue.indexOf("H"); //$NON-NLS-1$ int mi = modelValue.lastIndexOf("M"); //$NON-NLS-1$ int s = modelValue.indexOf("."); //$NON-NLS-1$ int ms = modelValue.indexOf("S"); //$NON-NLS-1$ if (!year_.isDisposed() && y > 0) year_.setText(modelValue.substring(1, y)); if (!month_.isDisposed() && mo > 0) month_.setText(modelValue.substring(y + 1, mo)); if (!day_.isDisposed() && d > 0) day_.setText(modelValue.substring(mo + 1, d)); if (!hour_.isDisposed() && h > 0) hour_.setText(modelValue.substring(d + 2, h)); if (!minute_.isDisposed() && mi > 0) minute_.setText(modelValue.substring(h + 1, mi)); if (!second_.isDisposed() && s > 0) second_.setText(modelValue.substring(mi + 1, s)); if (!msecond_.isDisposed() && ms > 0) msecond_.setText(modelValue.substring(s + 1, ms)); } } }