/* 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.server.clientrequest; import com.qumasoft.qvcslib.ServerResponseFactoryInterface; import com.qumasoft.qvcslib.requestdata.ClientRequestGetInfoForMergeData; import com.qumasoft.qvcslib.response.ServerResponseGetInfoForMerge; import com.qumasoft.qvcslib.response.ServerResponseInterface; import com.qumasoft.server.FileIDDictionary; import com.qumasoft.server.FileIDInfo; import com.qumasoft.server.MergeTypeHelper; import com.qumasoft.server.ProjectView; import com.qumasoft.server.ViewManager; /** * This class is used to lookup some information about a file so that the client can figure out what kind of merge on a project * branch it needs to perform in the case of overlap. At this writing, we're only supporting translucent type of project branches. * * @author Jim Voris */ public class ClientRequestGetInfoForMerge implements ClientRequestInterface { private final MergeTypeHelper mergeTypeHelper; private final ClientRequestGetInfoForMergeData request; /** * Creates a new instance of ClientRequestGetInfoForMerge. * * @param data instance of super class that contains command line arguments, etc. */ public ClientRequestGetInfoForMerge(ClientRequestGetInfoForMergeData data) { request = data; mergeTypeHelper = new MergeTypeHelper(request.getProjectName(), request.getViewName()); } /** * Lookup the info that we need in order to figure out what kind of merge we need to perform. * * @param userName user's name. * @param response the object that identifies the client. * @return information needed to figure out what kind of merge we need to perform on the client. */ @Override public ServerResponseInterface execute(String userName, ServerResponseFactoryInterface response) { ServerResponseInterface returnObject; String projectName = request.getProjectName(); String viewName = request.getViewName(); String appendedPath = request.getAppendedPath(); int fileID = request.getFileID(); ServerResponseGetInfoForMerge serverResponseGetInfoForMerge = new ServerResponseGetInfoForMerge(); ProjectView projectView = ViewManager.getInstance().getView(projectName, viewName); String parentBranchName = projectView.getRemoteViewProperties().getBranchParent(); FileIDInfo fileIDInfo = FileIDDictionary.getInstance().lookupFileIDInfo(projectName, viewName, fileID); FileIDInfo parentFileIDInfo = FileIDDictionary.getInstance().lookupFileIDInfo(projectName, parentBranchName, fileID); serverResponseGetInfoForMerge.setProjectName(projectName); serverResponseGetInfoForMerge.setViewName(viewName); serverResponseGetInfoForMerge.setAppendedPath(appendedPath); serverResponseGetInfoForMerge.setShortWorkfileName(fileIDInfo.getShortFilename()); serverResponseGetInfoForMerge.setParentAppendedPath(parentFileIDInfo.getAppendedPath()); serverResponseGetInfoForMerge.setParentShortWorkfileName(parentFileIDInfo.getShortFilename()); serverResponseGetInfoForMerge.setParentMovedFlag(mergeTypeHelper.didFileMoveOnParentBranch(fileID, parentBranchName)); serverResponseGetInfoForMerge.setParentRenamedFlag(mergeTypeHelper.wasFileRenamedOnParentBranch(fileID, parentBranchName)); serverResponseGetInfoForMerge.setBranchMovedFlag(mergeTypeHelper.didFileMoveOnBranch(fileID, parentBranchName)); serverResponseGetInfoForMerge.setBranchRenamedFlag(mergeTypeHelper.wasFileRenamedOnBranch(fileID, parentBranchName)); serverResponseGetInfoForMerge.setCreatedOnBranchFlag(mergeTypeHelper.wasFileCreatedOnBranch(fileID, parentBranchName)); returnObject = serverResponseGetInfoForMerge; return returnObject; } }