/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: SubsiteDeclaration.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.engine;
import com.uwyn.rife.engine.exceptions.EngineException;
import com.uwyn.rife.engine.exceptions.SubsiteIdInvalidException;
import com.uwyn.rife.ioc.HierarchicalProperties;
import com.uwyn.rife.ioc.PropertyValue;
import com.uwyn.rife.tools.Localization;
import java.util.Stack;
public class SubsiteDeclaration
{
private SiteBuilder mSiteBuilder = null;
private String mId = null;
private String mDeclarationName = null;
private String mUrlPrefix = null;
private GroupDeclaration mGroup = null;
private Stack<StateStore> mStateStores = null;
private HierarchicalProperties mProperties = null;
SubsiteDeclaration(String declarationName, GroupDeclaration group, Stack<StateStore> stateStores)
{
mDeclarationName = declarationName;
mUrlPrefix = "";
mGroup = group;
mStateStores = (Stack<StateStore>)stateStores.clone();
mProperties = new HierarchicalProperties();
}
public SubsiteDeclaration setId(String id)
throws EngineException
{
if (id != null &&
0 == id.length())
{
throw new SubsiteIdInvalidException(id);
}
if (null == id)
{
id = SiteBuilder.generateId(mDeclarationName);
}
if (id.indexOf(".") != -1 ||
id.indexOf("^") != -1)
{
throw new SubsiteIdInvalidException(id);
}
mId = id;
return this;
}
public SubsiteDeclaration setUrlPrefix(String urlPrefix)
throws EngineException
{
if (null == urlPrefix)
{
mUrlPrefix = "";
}
else
{
mUrlPrefix = Localization.extractLocalizedUrl(urlPrefix);
}
return this;
}
public String getId()
{
if (null == mId)
{
setId(null);
}
return mId;
}
public SiteBuilder getSiteBuilder()
{
return mSiteBuilder;
}
public String getDeclarationName()
{
return mDeclarationName;
}
public String getUrlPrefix()
{
return mUrlPrefix;
}
void setSiteBuilder(SiteBuilder siteBuilder)
{
mSiteBuilder = siteBuilder;
if (null == siteBuilder)
{
mProperties.setParent(null);
}
else
{
mProperties.setParent(siteBuilder.getProperties());
}
}
GroupDeclaration getGroupDeclaration()
{
return mGroup;
}
Stack<StateStore> getStateStores()
{
return mStateStores;
}
HierarchicalProperties getProperties()
{
return mProperties;
}
public SiteBuilder enterSubsite()
throws EngineException
{
return mSiteBuilder;
}
public SiteBuilder leaveSubsiteDeclaration()
{
return mSiteBuilder.getParent();
}
public SubsiteDeclaration addProperty(String name, PropertyValue value)
{
mProperties.put(name, value);
return this;
}
public boolean containsProperty(String name)
{
return mProperties.contains(name);
}
}