1 21 22 package org.continuent.sequoia.controller.virtualdatabase.management; 23 24 import org.continuent.sequoia.common.exceptions.NotImplementedException; 25 26 35 public abstract class AbstractAdminOperation 36 { 37 private long startTime; 38 private long endTime; 39 protected int operationStatus; 40 41 44 public static final int STATUS_NOT_STARTED = 0; 45 48 public static final int STATUS_EXECUTING = 1; 49 52 public static final int STATUS_SUCCESS = 2; 53 56 public static final int STATUS_FAILED = 3; 57 58 private final Object completionStatus = new Object (); 60 61 65 public AbstractAdminOperation() 66 { 67 startTime = System.currentTimeMillis(); 68 operationStatus = STATUS_NOT_STARTED; 69 } 70 71 76 public abstract void cancel() throws NotImplementedException; 77 78 84 public abstract String getDescription(); 85 86 91 public final long getEndTime() 92 { 93 return endTime; 94 } 95 96 101 public final void setEndTime(long endTime) 102 { 103 this.endTime = endTime; 104 } 105 106 111 public final long getStartTime() 112 { 113 return startTime; 114 } 115 116 121 public final void setStartTime(long startTime) 122 { 123 this.startTime = startTime; 124 } 125 126 135 public int getStatus() 136 { 137 return operationStatus; 138 } 139 140 146 public void notifyCompletion(boolean isSuccess) 147 { 148 synchronized (completionStatus) 149 { 150 endTime = System.currentTimeMillis(); 151 if (isSuccess) 152 operationStatus = STATUS_SUCCESS; 153 else 154 operationStatus = STATUS_FAILED; 155 completionStatus.notifyAll(); 156 } 157 } 158 159 163 public void waitForCompletion() 164 { 165 synchronized (completionStatus) 166 { 167 while ((operationStatus == STATUS_EXECUTING) 168 || (operationStatus == STATUS_NOT_STARTED)) 169 { 170 try 171 { 172 completionStatus.wait(); 173 } 174 catch (InterruptedException ignore) 175 { 176 } 177 } 178 } 179 } 180 181 } 182 | Popular Tags |