// Copyright 2004-2014 Jim Voris // // 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.qumasoft.guitools.qwin; import com.qumasoft.qvcslib.AccessList; import com.qumasoft.qvcslib.KeywordProperties; import com.qumasoft.qvcslib.LogfileInfo; import com.qumasoft.qvcslib.MergedInfoInterface; import com.qumasoft.qvcslib.RevisionHeader; import com.qumasoft.qvcslib.RevisionInformation; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; /** * Revision info content. * @author Jim Voris */ public class RevisionInfoContent { private List<String> revisionInfo = Collections.synchronizedList(new ArrayList<String>()); private KeywordProperties keywordProperties; private int wordWrapColumn; private static final int DEFAULT_WORD_WRAP_COLUMN = 72; /** * Creates a new instance of RevisionInfoContent. * @param mergedInfo the file that we're showing revision content for. */ public RevisionInfoContent(MergedInfoInterface mergedInfo) { try { keywordProperties = new KeywordProperties(); wordWrapColumn = keywordProperties.getWordWrapColumn(); } catch (Exception e) { wordWrapColumn = DEFAULT_WORD_WRAP_COLUMN; } if (mergedInfo.getArchiveInfo() != null) { addRevisionInformation(mergedInfo); } } private void addRevisionInformation(MergedInfoInterface mergedInfo) { LogfileInfo logfileInfo = mergedInfo.getLogfileInfo(); int revisionCount = logfileInfo.getLogFileHeaderInfo().getRevisionCount(); RevisionInformation revisionInformation = logfileInfo.getRevisionInformation(); AccessList accessList = new AccessList(logfileInfo.getLogFileHeaderInfo().getModifierList()); for (int i = 0; i < revisionCount; i++) { RevisionHeader revHeader = revisionInformation.getRevisionHeader(i); String revisionCreator = accessList.indexToUser(revHeader.getCreatorIndex()); revisionInfo.add(0, revHeader.getRevisionString() + " check in time: " + revHeader.getCheckInDate().toString() + " by " + revisionCreator + "\n"); if (revHeader.isLocked()) { String locker = accessList.indexToUser(revHeader.getLockerIndex()); revisionInfo.add(0, "**** Locked by: " + locker + " ****\n"); } revisionInfo.add(0, "Workfile edit date: " + revHeader.getEditDate().toString() + "\n"); addWordWrappedRevisionDescription(revHeader); revisionInfo.add(0, "----------------------------------------------------------------------------\n"); } } private void addWordWrappedRevisionDescription(RevisionHeader revHeader) { byte[] descriptionBuffer = revHeader.getRevisionDescription().getBytes(); // First convert any newline characters to spaces so we can put // word wrap in whatever column the property file says. for (int i = 0; i < descriptionBuffer.length; i++) { if (descriptionBuffer[i] == '\n') { descriptionBuffer[i] = ' '; } } // Figure out where to word wrap. int column = 0; int preceedingSpaceIndex = 0; for (int i = 0; i < descriptionBuffer.length; i++, column++) { if (descriptionBuffer[i] == ' ') { if ((preceedingSpaceIndex > 0) && (column > wordWrapColumn)) { descriptionBuffer[preceedingSpaceIndex] = '\n'; column = 0; } preceedingSpaceIndex = i; } } String wrappedDescription = new String(descriptionBuffer); revisionInfo.add(0, wrappedDescription + "\n"); } Iterator iterator() { return revisionInfo.iterator(); } }