/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.activemq.store.kahadb.scheduler.legacy; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.activemq.store.kahadb.disk.journal.Location; import org.apache.activemq.store.kahadb.disk.util.VariableMarshaller; final class LegacyJobLocation { private String jobId; private int repeat; private long startTime; private long delay; private long nextTime; private long period; private String cronEntry; private final Location location; public LegacyJobLocation(Location location) { this.location = location; } public LegacyJobLocation() { this(new Location()); } public void readExternal(DataInput in) throws IOException { this.jobId = in.readUTF(); this.repeat = in.readInt(); this.startTime = in.readLong(); this.delay = in.readLong(); this.nextTime = in.readLong(); this.period = in.readLong(); this.cronEntry = in.readUTF(); this.location.readExternal(in); } public void writeExternal(DataOutput out) throws IOException { out.writeUTF(this.jobId); out.writeInt(this.repeat); out.writeLong(this.startTime); out.writeLong(this.delay); out.writeLong(this.nextTime); out.writeLong(this.period); if (this.cronEntry == null) { this.cronEntry = ""; } out.writeUTF(this.cronEntry); this.location.writeExternal(out); } /** * @return the jobId */ public String getJobId() { return this.jobId; } /** * @param jobId * the jobId to set */ public void setJobId(String jobId) { this.jobId = jobId; } /** * @return the repeat */ public int getRepeat() { return this.repeat; } /** * @param repeat * the repeat to set */ public void setRepeat(int repeat) { this.repeat = repeat; } /** * @return the start */ public long getStartTime() { return this.startTime; } /** * @param start * the start to set */ public void setStartTime(long start) { this.startTime = start; } /** * @return the nextTime */ public synchronized long getNextTime() { return this.nextTime; } /** * @param nextTime * the nextTime to set */ public synchronized void setNextTime(long nextTime) { this.nextTime = nextTime; } /** * @return the period */ public long getPeriod() { return this.period; } /** * @param period * the period to set */ public void setPeriod(long period) { this.period = period; } /** * @return the cronEntry */ public synchronized String getCronEntry() { return this.cronEntry; } /** * @param cronEntry * the cronEntry to set */ public synchronized void setCronEntry(String cronEntry) { this.cronEntry = cronEntry; } /** * @return if this JobLocation represents a cron entry. */ public boolean isCron() { return getCronEntry() != null && getCronEntry().length() > 0; } /** * @return the delay */ public long getDelay() { return this.delay; } /** * @param delay * the delay to set */ public void setDelay(long delay) { this.delay = delay; } /** * @return the location */ public Location getLocation() { return this.location; } @Override public String toString() { return "Job [id=" + jobId + ", startTime=" + new Date(startTime) + ", delay=" + delay + ", period=" + period + ", repeat=" + repeat + ", nextTime=" + new Date(nextTime) + "]"; } static class JobLocationMarshaller extends VariableMarshaller<List<LegacyJobLocation>> { static final JobLocationMarshaller INSTANCE = new JobLocationMarshaller(); @Override public List<LegacyJobLocation> readPayload(DataInput dataIn) throws IOException { List<LegacyJobLocation> result = new ArrayList<LegacyJobLocation>(); int size = dataIn.readInt(); for (int i = 0; i < size; i++) { LegacyJobLocation jobLocation = new LegacyJobLocation(); jobLocation.readExternal(dataIn); result.add(jobLocation); } return result; } @Override public void writePayload(List<LegacyJobLocation> value, DataOutput dataOut) throws IOException { dataOut.writeInt(value.size()); for (LegacyJobLocation jobLocation : value) { jobLocation.writeExternal(dataOut); } } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((cronEntry == null) ? 0 : cronEntry.hashCode()); result = prime * result + (int) (delay ^ (delay >>> 32)); result = prime * result + ((jobId == null) ? 0 : jobId.hashCode()); result = prime * result + ((location == null) ? 0 : location.hashCode()); result = prime * result + (int) (nextTime ^ (nextTime >>> 32)); result = prime * result + (int) (period ^ (period >>> 32)); result = prime * result + repeat; result = prime * result + (int) (startTime ^ (startTime >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } LegacyJobLocation other = (LegacyJobLocation) obj; if (cronEntry == null) { if (other.cronEntry != null) { return false; } } else if (!cronEntry.equals(other.cronEntry)) { return false; } if (delay != other.delay) { return false; } if (jobId == null) { if (other.jobId != null) return false; } else if (!jobId.equals(other.jobId)) { return false; } if (location == null) { if (other.location != null) { return false; } } else if (!location.equals(other.location)) { return false; } if (nextTime != other.nextTime) { return false; } if (period != other.period) { return false; } if (repeat != other.repeat) { return false; } if (startTime != other.startTime) { return false; } return true; } }