001 /*
002 * file BasicDetailedFeedback.java
003 *
004 * Licensed Materials - Property of IBM
005 * Restricted Materials of IBM
006 *
007 * (c) Copyright IBM Corporation 2007, 2008. All Rights Reserved.
008 * Note to U.S. Government Users Restricted Rights: Use, duplication or
009 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
010 */
011
012 package javax.wvcm;
013
014 import java.text.MessageFormat;
015
016 import javax.wvcm.PropertyRequestItem.PropertyRequest;
017
018 public class DetailedFeedback implements Feedback
019 {
020 public static class NestedDetailedFeedback implements Feedback
021 {
022 private DetailedFeedback _detailedFeedback = null;
023 private PropertyRequest _forResult = null;
024 private int _begin = 0; // The beginning of the nested interval
025 private int _end = 0; // The end of the nested interval
026
027 private NestedDetailedFeedback(
028 DetailedFeedback detailedFeedback,
029 PropertyRequest forResult,
030 int end) {
031 _detailedFeedback = detailedFeedback;
032 _forResult = forResult;
033 _begin = detailedFeedback._last;
034 _end = end;
035 }
036
037 public PropertyRequest getPropertyRequestForResult() {
038 return _forResult;
039 }
040
041 public PropertyRequest getPropertyRequestForModified() {
042 return _detailedFeedback._forModified;
043 }
044
045 public boolean isAbortRequested() {
046 return _detailedFeedback.isAbortRequested();
047 }
048
049 public Feedback nest() {
050 return nest(null, 0);
051 }
052
053 public Feedback nest(PropertyRequest forResult) {
054 return nest(forResult, 0);
055 }
056
057 public Feedback nest(int percentCompleted) {
058 return nest(null, percentCompleted);
059 }
060
061 private boolean equalPropertyRequest(PropertyRequest pr1, PropertyRequest pr2) {
062 if (pr1 == pr2) {
063 return true;
064 }
065 if (pr1 != null) {
066 return pr1.equals(pr2);
067 }
068 return false;
069 }
070
071 public Feedback nest(PropertyRequest forResult, int percentToBeCompleted) {
072 if (equalPropertyRequest(forResult, _forResult) && (_end - _begin) == 0) {
073 return this;
074 }
075 int end = _begin + (percentToBeCompleted * (_end - _begin) / 100);
076 return new NestedDetailedFeedback(_detailedFeedback, forResult, end);
077 }
078
079 public String format(String fmt, Object...arguments) {
080 return MessageFormat.format(fmt, arguments);
081 }
082
083 public void notifyActive(String message) {
084 _detailedFeedback.notifyActive(message);
085 }
086
087 public void notifyWarning(String message) {
088 _detailedFeedback.notifyWarning(message);
089 }
090
091 public void notifyIsModified(Resource resource) {
092 _detailedFeedback.notifyIsModified(resource);
093 }
094
095 public void notifyPercentComplete(int percentComplete) {
096 int done = _begin + (percentComplete * (_end - _begin) / 100);
097 if (done > _detailedFeedback._last) {
098 _detailedFeedback.notifyPercentComplete(done);
099 }
100 }
101
102 public void abortRequested(boolean isAbortRequested) {
103 _detailedFeedback._isAbortRequested = isAbortRequested;
104 }
105
106 public void setPropertyRequestForResult(PropertyRequest propertyRequestForResult) {
107 _forResult = propertyRequestForResult;
108 }
109
110 public void setPropertyRequestForModified(PropertyRequest propertyRequestForModified) {
111 _detailedFeedback._forModified = propertyRequestForModified;
112 }
113
114 }
115 private static final Feedback nullDetailedFeedback = new DetailedFeedback();
116
117 private PropertyRequest _forResult = null;
118 private PropertyRequest _forModified = null;
119 private boolean _isAbortRequested = false;
120 protected int _last = 0; // The last percentage reported
121
122 public DetailedFeedback() {
123 }
124
125 /**
126 * Create a non-null Feedback object.
127 * @return a non-null Feedback object.
128 */
129 public static Feedback fb(Feedback feedback) {
130 if (feedback == null) {
131 return nullDetailedFeedback;
132 }
133 if (feedback instanceof Feedback) {
134 return (Feedback)feedback;
135 }
136 throw new RuntimeException("Unexpected feedback type"); //$NON-NLS-1$
137 }
138
139 public PropertyRequest getPropertyRequestForResult() {
140 return _forResult;
141 }
142
143 public PropertyRequest getPropertyRequestForModified() {
144 return _forModified;
145 }
146
147 public boolean isAbortRequested() {
148 return _isAbortRequested;
149 }
150
151 public Feedback nest() {
152 return nest(null, 0);
153 }
154
155 public Feedback nest(PropertyRequest forResult) {
156 return nest(forResult, 0);
157 }
158
159 public Feedback nest(int percentCompleted) {
160 return nest(null, percentCompleted);
161 }
162
163 public Feedback nest(PropertyRequest forResult, int percentToBeCompleted) {
164 int end = _last;
165 if (end < percentToBeCompleted) {
166 end = percentToBeCompleted;
167 }
168 return new NestedDetailedFeedback(this, forResult, end);
169 }
170
171 public String format(String fmt, Object...arguments) {
172 return MessageFormat.format(fmt, arguments);
173 }
174
175 public void notifyActive(String message) {
176 }
177
178 public void notifyWarning(String message) {
179 }
180
181 public void notifyIsModified(Resource resource) {
182 }
183
184 public void notifyPercentComplete(int percentComplete) {
185 _last = percentComplete;
186 }
187
188 public void abortRequested(boolean isAbortRequested) {
189 _isAbortRequested = isAbortRequested;
190 }
191
192 public void setPropertyRequestForResult(PropertyRequest propertyRequestForResult) {
193 _forResult = propertyRequestForResult;
194 }
195
196 public void setPropertyRequestForModified(PropertyRequest propertyRequestForModified) {
197 _forModified = propertyRequestForModified;
198 }
199
200 }
201