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