/* 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.AbstractProjectProperties;
import com.qumasoft.qvcslib.QVCSConstants;
import com.qumasoft.qvcslib.QVCSException;
import com.qumasoft.qvcslib.RemoteViewProperties;
import com.qumasoft.qvcslib.ServerResponseFactoryInterface;
import com.qumasoft.qvcslib.Utility;
import com.qumasoft.qvcslib.requestdata.ClientRequestServerCreateViewData;
import com.qumasoft.qvcslib.response.ServerResponseError;
import com.qumasoft.qvcslib.response.ServerResponseInterface;
import com.qumasoft.qvcslib.response.ServerResponseListViews;
import com.qumasoft.server.ActivityJournalManager;
import com.qumasoft.server.ArchiveDirManagerFactoryForServer;
import com.qumasoft.server.ProjectView;
import com.qumasoft.server.QVCSShutdownException;
import com.qumasoft.server.ViewManager;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Create a view.
* @author Jim Voris
*/
public class ClientRequestServerCreateView implements ClientRequestInterface {
// Create our logger object
private static final Logger LOGGER = Logger.getLogger("com.qumasoft.server");
private final ClientRequestServerCreateViewData request;
/**
* Creates a new instance of ClientRequestServerCreateView.
*
* @param data command line arguments, etc.
*/
public ClientRequestServerCreateView(ClientRequestServerCreateViewData data) {
request = data;
}
@Override
public ServerResponseInterface execute(String userName, ServerResponseFactoryInterface response) {
ServerResponseInterface returnObject = null;
try {
LOGGER.log(Level.INFO, "User name: " + request.getUserName());
// Create a view.
returnObject = createView();
} catch (QVCSShutdownException e) {
// Re-throw this.
throw e;
} catch (Exception e) {
LOGGER.log(Level.WARNING, Utility.expandStackTraceToString(e));
// Return a command error.
ServerResponseError error = new ServerResponseError("Caught exception trying to login user " + request.getUserName(), null, null, null);
returnObject = error;
}
return returnObject;
}
private ServerResponseInterface createView() {
ServerResponseInterface returnObject = null;
String projectName = request.getProjectName();
String viewName = request.getViewName();
try {
// Make sure the view doesn't already exist.
ProjectView projectView = ViewManager.getInstance().getView(projectName, viewName);
if (projectView == null) {
projectView = new ProjectView();
projectView.setProjectName(projectName);
projectView.setViewName(viewName);
// The view gets most of its properties from the parent project...
AbstractProjectProperties projectProperties = ArchiveDirManagerFactoryForServer.getInstance().getProjectProperties(request.getServerName(),
projectName, QVCSConstants.QVCS_TRUNK_VIEW,
QVCSConstants.QVCS_SERVED_PROJECT_TYPE);
RemoteViewProperties remoteViewProperties = new RemoteViewProperties(projectName, viewName, projectProperties.getProjectProperties());
// Set the view specific properties.
remoteViewProperties.setIsReadOnlyViewFlag(request.getIsReadOnlyViewFlag());
remoteViewProperties.setIsDateBasedViewFlag(request.getIsDateBasedViewFlag());
remoteViewProperties.setIsTranslucentBranchFlag(request.getIsTranslucentBranchFlag());
remoteViewProperties.setIsOpaqueBranchFlag(request.getIsOpaqueBranchFlag());
if (request.getIsDateBasedViewFlag()) {
remoteViewProperties.setDateBaseDate(request.getDateBasedDate());
remoteViewProperties.setDateBasedViewBranch(request.getDateBasedViewBranch());
} else if (request.getIsTranslucentBranchFlag() || request.getIsOpaqueBranchFlag()) {
remoteViewProperties.setBranchParent(request.getParentBranchName());
remoteViewProperties.setBranchDate(new Date());
}
projectView.setRemoteViewProperties(remoteViewProperties);
// And add this view to the collection of views that we know about.
ViewManager.getInstance().addView(projectView);
// The reply is the new list of views.
ServerResponseListViews listViewsResponse = new ServerResponseListViews();
listViewsResponse.setServerName(request.getServerName());
listViewsResponse.setProjectName(projectName);
ClientRequestListClientViews.buildViewInfo(listViewsResponse, projectName);
returnObject = listViewsResponse;
// Add an entry to the server journal file.
ActivityJournalManager.getInstance().addJournalEntry("Created new view named '" + viewName + "'.");
} else {
// The view already exists... don't create it again.
LOGGER.log(Level.INFO, "View: '" + viewName + "' already exists.");
}
} catch (QVCSException e) {
LOGGER.log(Level.WARNING, "Caught exception: " + e.getClass().toString() + " : " + e.getLocalizedMessage());
// Return an error.
ServerResponseError error = new ServerResponseError("Caught exception trying change project properties: " + e.getLocalizedMessage(), projectName, viewName, null);
returnObject = error;
}
return returnObject;
}
}