/** * Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.com) * * 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 com.linkedin.pinot.common.metadata.segment; import java.util.Map; import org.apache.helix.ZNRecord; import com.linkedin.pinot.common.utils.CommonConstants; import com.linkedin.pinot.common.utils.CommonConstants.Segment.SegmentType; import static com.linkedin.pinot.common.utils.EqualityUtils.isEqual; import static com.linkedin.pinot.common.utils.EqualityUtils.hashCodeOf; import static com.linkedin.pinot.common.utils.EqualityUtils.isSameReference; import static com.linkedin.pinot.common.utils.EqualityUtils.isNullOrNotSameClass; public class OfflineSegmentZKMetadata extends SegmentZKMetadata { private String _downloadUrl = null; private long _pushTime = Long.MIN_VALUE; private long _refreshTime = Long.MIN_VALUE; public OfflineSegmentZKMetadata() { setSegmentType(SegmentType.OFFLINE); } public OfflineSegmentZKMetadata(ZNRecord znRecord) { super(znRecord); setSegmentType(SegmentType.OFFLINE); _downloadUrl = znRecord.getSimpleField(CommonConstants.Segment.Offline.DOWNLOAD_URL); _pushTime = znRecord.getLongField(CommonConstants.Segment.Offline.PUSH_TIME, Long.MIN_VALUE); _refreshTime = znRecord.getLongField(CommonConstants.Segment.Offline.REFRESH_TIME, Long.MIN_VALUE); } public String getDownloadUrl() { return _downloadUrl; } public void setDownloadUrl(String downloadUrl) { _downloadUrl = downloadUrl; } public long getPushTime() { return _pushTime; } public void setPushTime(long pushTime) { _pushTime = pushTime; } public long getRefreshTime() { return _refreshTime; } public void setRefreshTime(long currentTimeMillis) { _refreshTime = currentTimeMillis; } @Override public ZNRecord toZNRecord() { ZNRecord znRecord = super.toZNRecord(); znRecord.setSimpleField(CommonConstants.Segment.Offline.DOWNLOAD_URL, _downloadUrl); znRecord.setLongField(CommonConstants.Segment.Offline.PUSH_TIME, _pushTime); znRecord.setLongField(CommonConstants.Segment.Offline.REFRESH_TIME, _refreshTime); return znRecord; } @Override public String toString() { final StringBuilder result = new StringBuilder(); String newline = "\n"; result.append(this.getClass().getName()); result.append(" Object {"); result.append(newline); result.append(" " + super.getClass().getName() + " : " + super.toString()); result.append(newline); result.append(" " + CommonConstants.Segment.Offline.DOWNLOAD_URL + " : " + _downloadUrl); result.append(newline); result.append(" " + CommonConstants.Segment.Offline.PUSH_TIME + " : " + _pushTime); result.append(newline); result.append(" " + CommonConstants.Segment.Offline.REFRESH_TIME + " : " + _refreshTime); result.append(newline); result.append("}"); return result.toString(); } @Override public boolean equals(Object segmentMetadata) { if (isSameReference(this, segmentMetadata)) { return true; } if (isNullOrNotSameClass(this, segmentMetadata)) { return false; } OfflineSegmentZKMetadata metadata = (OfflineSegmentZKMetadata) segmentMetadata; return super.equals(metadata) && isEqual(_pushTime, metadata._pushTime) && isEqual(_refreshTime, metadata._refreshTime) && isEqual(_downloadUrl, metadata._downloadUrl); } @Override public int hashCode() { int result = super.hashCode(); result = hashCodeOf(result, _downloadUrl); result = hashCodeOf(result, _pushTime); result = hashCodeOf(result, _refreshTime); return result; } @Override public Map<String, String> toMap() { Map<String, String> configMap = super.toMap(); configMap.put(CommonConstants.Segment.Offline.DOWNLOAD_URL, _downloadUrl); configMap.put(CommonConstants.Segment.Offline.PUSH_TIME, Long.toString(_pushTime)); configMap.put(CommonConstants.Segment.Offline.REFRESH_TIME, Long.toString(_refreshTime)); configMap.put(CommonConstants.Segment.SEGMENT_TYPE, SegmentType.OFFLINE.toString()); return configMap; } }