Java tutorial
/* * Copyright 2014 Alexey Plotnik * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.stem.streaming; import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; public class DiskMovement { UUID diskId; AtomicLong completed; AtomicLong total; // TODO: currentIndex to make it possible to resume the session @JsonIgnore private StreamSession session; // Let's do a simple link Map<Long, BucketStreamingPart> bucketStreams = new HashMap<Long, BucketStreamingPart>(); public void setSession(StreamSession session) { this.session = session; } public DiskMovement() { completed = new AtomicLong(-1); total = new AtomicLong(-1); } public DiskMovement(UUID diskId) { this(); this.diskId = diskId; } public void put(Long vBucket, BucketStreamingPart part) { bucketStreams.put(vBucket, part); } public BucketStreamingPart get(Long vBucket) { return bucketStreams.get(vBucket); } public UUID getDiskId() { return diskId; } public void setDiskId(UUID diskId) { this.diskId = diskId; } public Map<Long, BucketStreamingPart> getBucketStreams() { return bucketStreams; } public void setBucketStreams(Map<Long, BucketStreamingPart> bucketStreams) { this.bucketStreams = bucketStreams; } // TODO: isn't it a part of interface like Progressable? @JsonIgnore public boolean isInitialized() { return completed.get() != -1 && total.get() != -1; } public void progress(long delta) { completed.addAndGet(delta); if (null != session) { session.progress(delta); } } public void setProgress(long value) { long before = completed.get(); completed.set(value); if (null != session) { session.progress(-before); session.progress(completed.get()); } } public long getCompleted() { return completed.get(); } public long getTotal() { return total.get(); } public void setTotal(long value) { long before = total.get(); total.set(value); if (null != session) { session.addTotal(-before); session.addTotal(total.get()); } } public void init(StreamSession session, int progress, long total) { setSession(session); setProgress(progress); setTotal(total); } }