/******************************************************************************* * Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0-standalone.html ******************************************************************************/ package se.unlogic.standardutils.operation; import se.unlogic.standardutils.time.TimeUtils; public class ProgressMeter { private long start; private long finish; private long currentPosition; private long startTime; private long endTime; public ProgressMeter(){}; public ProgressMeter(long start, long finish){ this.start = start; this.finish = finish; } public ProgressMeter(boolean setStartTime){ if(setStartTime){ this.setStartTime(); } } public ProgressMeter(int start, int finish, int currentPosition){ this.start = start; this.finish = finish; this.currentPosition = currentPosition; } public long getCurrentPosition() { return currentPosition; } public synchronized void setCurrentPosition(int currentPosition) { this.currentPosition = currentPosition; } public synchronized void incrementCurrentPosition(){ this.currentPosition++; } public synchronized void decrementCurrentPosition(){ this.currentPosition--; } public long getFinish() { return finish; } public void setFinish(long finish) { this.finish = finish; } public long getStart() { return start; } public void setStart(long start) { this.start = start; } public int getPercentComplete(){ if(this.finish > this.start){ return (int)(((float)(this.currentPosition - this.start)/(float)(this.finish - this.start))*100f); }else if(this.finish < this.start){ return (int)(((float)(this.start - this.currentPosition)/(float)(this.start - this.finish))*100f); }else{ return -1; } } public int getPercentRemaining(){ if(this.finish > this.start){ if(this.finish - this.currentPosition != 0){ return (int)(((float)(this.finish - this.currentPosition)/(float)(this.finish - this.start))*100f); }else{ return 0; } }else if(this.finish < this.start){ if(this.currentPosition - this.finish != 0){ return (int)(((float)(this.currentPosition - this.finish)/(float)(this.start - this.finish))*100f); }else{ return 0; } }else{ return -1; } } public long getIntervalSize(){ if(this.finish > this.start){ return this.finish - this.start; }else if(this.finish < this.start){ return this.start - this.finish; }else{ return 0; } } public long getStartTime() { return startTime; } public void setStartTime() { this.startTime = System.currentTimeMillis(); } public void setStartTime(long startTime) { this.startTime = startTime; } public long getEndTime() { return endTime; } public void setEndTime() { this.endTime = System.currentTimeMillis(); } public void setEndTime(long endTime) { this.endTime = endTime; } public long getTimeSpent(){ if(this.startTime != 0){ if(this.endTime == 0){ return System.currentTimeMillis() - this.startTime; }else{ return this.endTime - this.startTime; } }else{ return 0; } } public void incrementCurrentPosition(long value) { this.currentPosition += value; } public String getTimeSpentString() { return TimeUtils.millisecondsToString(getTimeSpent()); } }