/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.db.urlname;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;
import java.util.ArrayList;
import java.util.List;
/**
* A class which contains filter criteria for reading or deleting URL name mapping entries.<p>
*
* @since 8.0.0
*/
public class CmsUrlNameMappingFilter {
/** Base filter which matches all URL name mapping entries. */
public static final CmsUrlNameMappingFilter ALL = new CmsUrlNameMappingFilter();
/** The name which should be matched. */
private String m_name;
/** The name pattern which should be matched. */
private String m_namePattern;
/** The locale which should be matched. */
private String m_locale;
/** The state which should be matched. */
private Integer m_state;
/** The structure id which should be matched. */
private CmsUUID m_structureId;
/** The structure id which should not be matched. */
private CmsUUID m_rejectStructureId;
/**
* The default constructor.<p>
*/
protected CmsUrlNameMappingFilter() {
// do nothing
}
/**
* The copy constructor.<p>
*
* @param filter the filter to copy
*/
protected CmsUrlNameMappingFilter(CmsUrlNameMappingFilter filter) {
this.m_name = filter.m_name;
this.m_structureId = filter.m_structureId;
this.m_rejectStructureId = filter.m_rejectStructureId;
this.m_state = filter.m_state;
this.m_namePattern = filter.m_namePattern;
this.m_locale = filter.m_locale;
}
/**
* Returns a new url name mapping filter based on the current one which also has to match a given locale.<p>
*
* @param locale the locale to match
*
* @return the new filter
*/
public CmsUrlNameMappingFilter filterLocale(String locale) {
if (locale == null) {
throw new IllegalArgumentException();
}
CmsUrlNameMappingFilter result = new CmsUrlNameMappingFilter(this);
result.m_locale = locale;
return result;
}
/**
* Creates a new filter from the current filter which also has to match a given name.<p>
*
* @param name the name to match
*
* @return a new filter
*/
public CmsUrlNameMappingFilter filterName(String name) {
if (name == null) {
throw new IllegalArgumentException();
}
CmsUrlNameMappingFilter result = new CmsUrlNameMappingFilter(this);
result.m_name = name;
return result;
}
/**
* Creates a new filter from the current filter which also has to match a given name pattern.<p>
*
* @param namePattern the name pattern which should be matched
*
* @return a new filter
*/
public CmsUrlNameMappingFilter filterNamePattern(String namePattern) {
if (namePattern == null) {
throw new IllegalArgumentException();
}
CmsUrlNameMappingFilter result = new CmsUrlNameMappingFilter(this);
result.m_namePattern = namePattern;
return result;
}
/**
* Creates a new filter from the current filter which also must not match a given structure id.<p>
*
* @param id the structure id to not match
*
* @return a new filter
*/
public CmsUrlNameMappingFilter filterRejectStructureId(CmsUUID id) {
if (id == null) {
throw new IllegalArgumentException();
}
if (m_structureId != null) {
throw new IllegalStateException();
}
CmsUrlNameMappingFilter result = new CmsUrlNameMappingFilter(this);
result.m_rejectStructureId = id;
return result;
}
/**
* Creates a new filter from the current filter which also has to match a given state.<p>
*
* @param state the state to match
*
* @return the new filter
*/
public CmsUrlNameMappingFilter filterState(int state) {
CmsUrlNameMappingFilter result = new CmsUrlNameMappingFilter(this);
result.m_state = new Integer(state);
return result;
}
/**
* Creates a new filter from the current filter which also has to match a given structure id.<p>
*
* @param structureId the structure id to match
*
* @return the new filter
*/
public CmsUrlNameMappingFilter filterStructureId(CmsUUID structureId) {
if (structureId == null) {
throw new IllegalArgumentException();
}
CmsUrlNameMappingFilter result = new CmsUrlNameMappingFilter(this);
result.m_structureId = structureId;
return result;
}
/**
* Returns the locale which should be matched by the filter.<p>
*
* @return the locale
*/
public String getLocale() {
return m_locale;
}
/**
* Returns the name which should be matched by the filter.<p>
*
* @return the name which should be matched by the filter
*/
public String getName() {
return m_name;
}
/**
* Returns the name pattern which should be matched by the filter.<p>
*
* @return the name pattern which should be matched by the filter
*/
public String getNamePattern() {
return m_namePattern;
}
/**
* Returns the structure id which should not be matched by the filter.<p>
*
* @return a structure id
*/
public CmsUUID getRejectStructureId() {
return m_rejectStructureId;
}
/**
* Returns the state which should be matched by the filter.<p>
*
* @return the state which should be matched by the filter
*/
public Integer getState() {
return m_state;
}
/**
* Returns the structure id which should be matched by the filter.<p>
*
* @return the structure id which should be matched by the filter
*/
public CmsUUID getStructureId() {
return m_structureId;
}
/**
* Checks whether this is a filter which only filters by structure id.<p>
*
* @return true if this is a filter which only filters by structure id
*/
public boolean isIdFilter() {
return (m_structureId != null)
&& (m_name == null)
&& (m_namePattern == null)
&& (m_state == null)
&& (m_rejectStructureId == null)
&& (m_locale == null);
}
/**
* Checks whether this is a filter which only filters by name.<p>
*
* @return true if this is a filter which only filters by name
*/
public boolean isNameFilter() {
return (m_structureId == null)
&& (m_name != null)
&& (m_namePattern == null)
&& (m_state == null)
&& (m_rejectStructureId == null)
&& (m_locale == null);
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
List<String> resultParts = new ArrayList<String>();
resultParts.add("[CmsUrlNameMappingFilter:");
if (m_name != null) {
resultParts.add("name='" + m_name + "'");
}
if (m_structureId != null) {
resultParts.add("id=" + m_structureId);
}
if (m_state != null) {
resultParts.add("state=" + m_state);
}
if (m_namePattern != null) {
resultParts.add("pattern='" + m_namePattern + "'");
}
if (m_rejectStructureId != null) {
resultParts.add("rejectId=" + m_rejectStructureId);
}
resultParts.add("]");
return CmsStringUtil.listAsString(resultParts, " ");
}
}