// Copyright 2012 Google Inc. All Rights Reserved. // // 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.google.collide.server.shared.merge; import com.google.collide.shared.util.StringUtils; import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; /** * Represents a part of a document that is the result of a 3-way merge. * * <p> * Note: This class uses identity semantics for equality. * */ public class MergeChunk { private final static int MAX_DISPLAY_LENGTH = 8; // Set iff hasConflict is true. private int startLine; // Set iff hasConflict is true. private int endLine; // Set iff hasConflict is true. private String baseData; // Set iff hasConflict is true. private String parentData; // Set iff hasConflict is true. private String childData; // Set iff hasConflict is false. private String mergedData; private boolean hasConflict; public MergeChunk() { } /* * Copy-constructor. */ public MergeChunk(MergeChunk chunk) { this.startLine = chunk.startLine; this.endLine = chunk.endLine; this.baseData = chunk.baseData; this.childData = chunk.childData; this.parentData = chunk.parentData; this.mergedData = chunk.mergedData; this.hasConflict = chunk.hasConflict; } public String getBaseData() { return StringUtils.nullToEmpty(baseData); } public int getEndLine() { return endLine; } public String getChildData() { return StringUtils.nullToEmpty(childData); } public String getMergedData() { return mergedData; } public String getParentData() { return StringUtils.nullToEmpty(parentData); } public int getStartLine() { return startLine; } public boolean hasConflict() { return hasConflict; } public void setBaseData(String baseData) { this.baseData = baseData; } public void setEndLine(int line) { this.endLine = line; } public void setHasConflict(boolean hasConflict) { this.hasConflict = hasConflict; } public void setChildData(String childData) { this.childData = childData; } public void setMergedData(String mergedData) { this.mergedData = mergedData; } public void setParentData(String parentData) { this.parentData = parentData; } public void setStartLine(int line) { this.startLine = line; } @Override public String toString() { return toStringFields(Objects.toStringHelper(this)).toString(); } protected ToStringHelper toStringFields(ToStringHelper toStringHelper) { return toStringHelper .add( "baseData", StringUtils.truncateAtMaxLength(StringUtils.nullToEmpty(baseData), MAX_DISPLAY_LENGTH, true)) .add( "parentData", StringUtils.truncateAtMaxLength(StringUtils.nullToEmpty(parentData), MAX_DISPLAY_LENGTH, true)) .add( "childData", StringUtils.truncateAtMaxLength(StringUtils.nullToEmpty(childData), MAX_DISPLAY_LENGTH, true)) .add( "mergedData", StringUtils.truncateAtMaxLength(StringUtils.nullToEmpty(mergedData), MAX_DISPLAY_LENGTH, true)).add("hasConflict", hasConflict).add("startLine", startLine) .add("endLine", endLine); } }