| /******************************************************************************* |
| * 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); |
| } |
| |
| 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)); |
| } |
| } |
| } |