Jon Cox f55c3091ea Fixed up paths a bit more so that now you get files paths like
this: mysite--guest--preview/HEAD/DATA/www/avm_webapps/ROOT/WEB-INF/...
  and:  mysite--guest--preview/VERSION/v1/DATA/www/avm_webapps/ROOT/WEB-INF/...

  rather than:  mysite--guest--preview/HEAD/DATA/appBase/avm_webapps/ROOT/WEB-INF/...
  and:          mysite--guest--preview/VERSION/v1/DATA/appBase/avm_webapps/ROOT/WEB-INF/...

  The reason for this is that the actual "appliation base"
  is and always has been "avm_webapps";  the original reason
  for making the *parent* of this dir called appBase had do 
  do with the fact that you can have diffrent app bases
  for different virtual hosts.  However, in the end it causes
  way more confusion than it was ever worth, so it's gone now.

  The reason for all the modified files is that people were
  hard-coding values in many different places, and/or defining
  their own constants for something that was needed at a
  higher level.

  As a temporary measure (I hope), I've defined some rather ugly-looking
  constants in JNDIConstants.java, and have used them everywhere:

         DIR_DEFAULT_WWW      = "www"
         DIR_DEFAULT_APPBASE  = "avm_webapps"

  The reason for calling the parent of the new application base "www" 
  is that will be the default place that www-centric stuff happens
  (therefore, it's also the level at which the overlays take place).

  Ultimately, I'd like to turn these into spring configs,
  and bring back support for multiple AVMHost nodes within
  the same Tomcat... but it's not a priority at the moment.

  Please don't hard-code any dirs named "appBase" as the
  root level dir in a repo -- it's now  "www", and will
  change again to a function call later when/if virtual 
  AVMHosts come back.   Keeping them as constants also
  helps them to be easier to find when overhauling things.
  





git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4696 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2006-12-25 02:07:46 +00:00

115 lines
4.1 KiB
Java

/*
* Copyright (C) 2006 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* 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 org.alfresco.repo.avm.actions;
import java.util.List;
import org.alfresco.config.JNDIConstants;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.avmsync.AVMDifference;
import org.alfresco.service.cmr.avmsync.AVMSyncException;
import org.alfresco.service.cmr.avmsync.AVMSyncService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.util.Pair;
/**
* An ActionExecuter that promotes content from one store to another.
* The NodeRef argument is in the source AVMStore. The 'target-store'
* mandatory argument is the name of the destination store.
* @author britt
*/
public class SimpleAVMPromoteAction extends ActionExecuterAbstractBase
{
public static final String NAME = "simple-avm-promote";
public static final String PARAM_TARGET_STORE = "target-store";
/**
* The AVMSyncService instance.
*/
private AVMSyncService fAVMSyncService;
/**
* Default constructor.
*/
public SimpleAVMPromoteAction()
{
super();
}
/**
* Set the AVMSyncService instance.
* @param avmSyncService
*/
public void setAvmSyncService(AVMSyncService avmSyncService)
{
fAVMSyncService = avmSyncService;
}
/**
* Do a promotion of an asset from one sandbox to another.
* Takes a mandatory parameter 'target-store' which is the name of the
* target AVMStore.
* @param action The source of parameters.
* @param actionedUponNodeRef The source AVM NodeRef.
*/
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
{
String targetStoreName = (String)action.getParameterValue(PARAM_TARGET_STORE);
// Crack the NodeRef.
Pair<Integer, String> avmVersionPath = AVMNodeConverter.ToAVMVersionPath(actionedUponNodeRef);
int version = avmVersionPath.getFirst();
String path = avmVersionPath.getSecond();
// Get store name and path parts.
String [] storePath = path.split(":");
if (storePath.length != 2)
{
throw new AVMSyncException("Malformed source path: " + path);
}
// Compute the corresponding target path.
String targetPath = targetStoreName + ":" + storePath[1];
// Find the differences.
List<AVMDifference> diffs =
fAVMSyncService.compare(version, path, -1, targetPath, null);
// TODO fix update comments at some point.
// Do the promote.
fAVMSyncService.update(diffs, null, true, true, false, false, null, null);
// Flatten the source on top of the destination.
fAVMSyncService.flatten(storePath[0] + ":/" + JNDIConstants.DIR_DEFAULT_WWW,
targetStoreName + ":/" + JNDIConstants.DIR_DEFAULT_WWW);
}
/**
* Define needed parameters.
* @param paramList The List of ParameterDefinitions to add to.
*/
@Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList)
{
paramList.add(new ParameterDefinitionImpl(PARAM_TARGET_STORE,
DataTypeDefinition.TEXT,
true,
getParamDisplayLabel(PARAM_TARGET_STORE)));
}
}