/* 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.qvcslib.response;
import com.qumasoft.qvcslib.AddRevisionData;
import com.qumasoft.qvcslib.ArchiveDirManagerProxy;
import com.qumasoft.qvcslib.ArchiveInfoInterface;
import com.qumasoft.qvcslib.LabelManager;
import com.qumasoft.qvcslib.LogFileProxy;
import com.qumasoft.qvcslib.LogfileInfo;
import com.qumasoft.qvcslib.MergedInfoInterface;
import com.qumasoft.qvcslib.QVCSException;
import com.qumasoft.qvcslib.SkinnyLogfileInfo;
import com.qumasoft.qvcslib.WorkfileDirectoryManagerInterface;
import com.qumasoft.qvcslib.WorkfileInfo;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Checkin response.
* @author Jim Voris
*/
public class ServerResponseCheckIn implements ServerResponseInterface {
private static final long serialVersionUID = 1695701430998444307L;
// These are serialized:
private String clientWorkfileName = null;
private String shortWorkfileName = null;
private String appendedPath = null;
private String projectName = null;
private String viewName = null;
private String newRevisionString = null;
private boolean keepLockedFlag = false;
private boolean protectWorkfileFlag = false;
private boolean noExpandKeywordsFlag = false;
private int index = -1;
// Send back the skinny logfile info
private SkinnyLogfileInfo skinnyLogfileInfo = null;
// The following elements are optionally sent back if needed to expand keywords.
private LogfileInfo logfileInfo = null;
private AddRevisionData addedRevisionData = null;
// Create our logger object
private static final Logger LOGGER = Logger.getLogger("com.qumasoft.qvcslib");
/**
* Creates new ServerResponseCheckOut.
*/
public ServerResponseCheckIn() {
}
/**
* Get the skinny logfile info.
* @return the skinny logfile info.
*/
public SkinnyLogfileInfo getSkinnyLogfileInfo() {
return skinnyLogfileInfo;
}
/**
* Set the skinny logfile info.
* @param skinnyInfo the skinny logfile info.
*/
public void setSkinnyLogfileInfo(SkinnyLogfileInfo skinnyInfo) {
skinnyLogfileInfo = skinnyInfo;
}
/**
* Get the logfile info.
* @return the logfile info.
*/
public LogfileInfo getLogfileInfo() {
return logfileInfo;
}
/**
* Set the logfile info.
* @param info the logfile info.
*/
public void setLogfileInfo(LogfileInfo info) {
logfileInfo = info;
}
/**
* Get the added revision data.
* @return the added revision data.
*/
public AddRevisionData getAddedRevisionData() {
return addedRevisionData;
}
/**
* Set the added revision data.
* @param addedRevData the added revision data.
*/
public void setAddedRevisionData(AddRevisionData addedRevData) {
addedRevisionData = addedRevData;
}
/**
* Get the client workfile name.
* @return the client workfile name.
*/
public String getClientWorkfileName() {
return clientWorkfileName;
}
/**
* Set the client workfile name.
* @param workfileName the client workfile name.
*/
public void setClientWorkfileName(String workfileName) {
clientWorkfileName = workfileName;
}
/**
* Get the short workfile name.
* @return the short workfile name.
*/
public String getShortWorkfileName() {
return shortWorkfileName;
}
/**
* Set the short workfile name.
* @param shortName the short workfile name.
*/
public void setShortWorkfileName(String shortName) {
shortWorkfileName = shortName;
}
/**
* Get the appended path.
* @return the appended path.
*/
public String getAppendedPath() {
return appendedPath;
}
/**
* Set the appended path.
* @param path the appended path.
*/
public void setAppendedPath(String path) {
appendedPath = path;
}
/**
* Get the project name.
* @return the project name.
*/
public String getProjectName() {
return projectName;
}
/**
* Set the project name.
* @param project the project name.
*/
public void setProjectName(String project) {
projectName = project;
}
/**
* Get the view name.
* @return the view name.
*/
public String getViewName() {
return viewName;
}
/**
* Set the view name.
* @param view the view name.
*/
public void setViewName(final String view) {
viewName = view;
}
/**
* Get the index. (To correlate with the client workfile cache index.).
* @return the index.
*/
public int getIndex() {
return index;
}
/**
* Set the index.
* @param idx the index to correlate with the client workfile cache index.
*/
public void setIndex(int idx) {
index = idx;
}
/**
* Get the keep locked flag.
* @return the keep locked flag.
*/
public boolean getKeepLockedFlag() {
return keepLockedFlag;
}
/**
* Set the keep locked flag.
* @param flag the keep locked flag.
*/
public void setKeepLockedFlag(boolean flag) {
keepLockedFlag = flag;
}
/**
* Get the no expand keywords flag.
* @return the no expand keywords flag.
*/
public boolean getNoExpandKeywordsFlag() {
return noExpandKeywordsFlag;
}
/**
* Set the no expand keywords flag.
* @param flag the no expand keywords flag.
*/
public void setNoExpandKeywordsFlag(boolean flag) {
noExpandKeywordsFlag = flag;
}
/**
* Get the protect workfile flag.
* @return the protect workfile flag.
*/
public boolean getProtectWorkfileFlag() {
return protectWorkfileFlag;
}
/**
* Set the protect workfile flag.
* @param flag the protect workfile flag.
*/
public void setProtectWorkfileFlag(boolean flag) {
protectWorkfileFlag = flag;
}
/**
* Get the new revision string.
* @return the new revision string.
*/
public String getNewRevisionString() {
return newRevisionString;
}
/**
* Set the new revision string.
* @param revisionString the new revision string.
*/
public void setNewRevisionString(String revisionString) {
newRevisionString = revisionString;
}
/**
* {@inheritDoc}
*/
@Override
public void updateDirManagerProxy(ArchiveDirManagerProxy directoryManagerProxy) {
StringBuilder message = new StringBuilder("Checked in ");
message.append(getShortWorkfileName());
message.append(" from project directory: ");
message.append(getAppendedPath());
WorkfileDirectoryManagerInterface workfileDirManager = directoryManagerProxy.getDirectoryManager().getWorkfileDirectoryManager();
if (workfileDirManager != null) {
try {
String fullWorkfileName = workfileDirManager.getWorkfileDirectory() + File.separator + getShortWorkfileName();
// We only need to update the workfile directory manager if the workfile
// actually created a new revision.
if ((getNewRevisionString() != null) && (getNewRevisionString().length() > 0)) {
WorkfileInfo workfileInfo = new WorkfileInfo(fullWorkfileName, getSkinnyLogfileInfo().getAttributes().getIsExpandKeywords(),
getSkinnyLogfileInfo().getAttributes().getIsBinaryfile(), getProjectName());
// Set the archiveInfo on the workfileInfo object so we can
// contract (actually expand) keywords for a binary file for
// computing a useful digest.
MergedInfoInterface mergedInfo = directoryManagerProxy.getDirectoryManager().getMergedInfo(getShortWorkfileName());
ArchiveInfoInterface archiveInfo = mergedInfo.getArchiveInfo();
workfileInfo.setArchiveInfo(archiveInfo);
// Need to test that the workfile actually exists, since
// we may have deleted it before getting here, if the
// delete workfile attribute had been set.
if (workfileInfo.getWorkfile().exists()) {
workfileInfo.setFetchedDate(workfileInfo.getWorkfile().lastModified());
workfileInfo.setWorkfileRevisionString(getNewRevisionString());
}
// Update the logfile info on the logFileProxy object before
// we update the workfile digest (which happens via the
// updateWorkfileInfo() call...
if (getLogfileInfo() != null) {
LogFileProxy logFileProxy = (LogFileProxy) archiveInfo;
synchronized (logFileProxy) {
logFileProxy.setLogfileInfo(getLogfileInfo());
// We potentially received some label information. Store
// it away with the Label Manager...
LabelManager.getInstance().addLabels(getProjectName(), getLogfileInfo());
// Notify the other thread that it can continue.
logFileProxy.notifyAll();
}
}
workfileDirManager.updateWorkfileInfo(workfileInfo);
}
} catch (IOException | QVCSException e) {
LOGGER.log(Level.WARNING, "Caught exception trying to update workfile info: " + e.getLocalizedMessage());
}
}
// This goes to the status line
directoryManagerProxy.updateInfo(message.toString());
}
/**
* {@inheritDoc}
*/
@Override
public ResponseOperationType getOperationType() {
return ResponseOperationType.SR_CHECK_IN;
}
}