/* * Copyright (C) 2010 eXo Platform SAS. * * This 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 software 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. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.portal.mop.user; import java.util.Collections; import java.util.EnumSet; import java.util.Set; import org.exoplatform.commons.utils.Safe; import org.exoplatform.portal.mop.Visibility; /** * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> * @version $Revision$ */ public class UserNodeFilterConfig { /** . */ public static final int AUTH_NO_CHECK = 0; /** . */ public static final int AUTH_READ = 1; /** . */ public static final int AUTH_READ_WRITE = 2; /** . */ final Set<Visibility> visibility; /** . */ final int authorizationMode; /** . */ final boolean temporalCheck; /** An optional path restricting what should be seen, this is not exposed outside this API (!!!). */ String[] path; public UserNodeFilterConfig(Builder builder) { if (builder == null) { throw new NullPointerException(); } // this.visibility = Safe.unmodifiableSet(builder.withVisibility); this.authorizationMode = builder.withAuthorizationMode; this.temporalCheck = builder.withTemporalCheck; this.path = builder.path; } public Set<Visibility> getVisibility() { return visibility; } public int getAuthorizationMode() { return authorizationMode; } public boolean getTemporalCheck() { return temporalCheck; } public static Builder builder() { return new Builder(); } public static Builder builder(UserNodeFilterConfig predicate) { return new Builder(predicate); } public static class Builder { /** . */ private Set<Visibility> withVisibility; /** . */ private int withAuthorizationMode; /** . */ private boolean withTemporalCheck; /** . */ private String[] path; private Builder() { this.withVisibility = null; this.withAuthorizationMode = AUTH_NO_CHECK; this.withTemporalCheck = false; this.path = null; } private Builder(UserNodeFilterConfig predicate) { this.withVisibility = predicate.visibility; this.withAuthorizationMode = predicate.authorizationMode; this.withTemporalCheck = predicate.temporalCheck; this.path = predicate.path; } public Builder withVisibility(Visibility first, Visibility... rest) { withVisibility = EnumSet.of(first, rest); return this; } public Builder withVisibility(Visibility first) { withVisibility = EnumSet.of(first); return this; } public Builder withVisibility(Visibility[] all) { if (all.length == 0) { withVisibility = Collections.emptySet(); } else if (all.length == 1) { withVisibility = EnumSet.of(all[0]); } else { Visibility[] rest = new Visibility[all.length - 1]; System.arraycopy(all, 1, rest, 0, rest.length); withVisibility = EnumSet.of(all[0], rest); } return this; } public Builder withoutVisibility() { withVisibility = null; return this; } public Builder withTemporalCheck() { this.withTemporalCheck = true; return this; } public Builder withoutTemporalCheck() { this.withTemporalCheck = false; return this; } public Builder withAuthMode(int withAuthorizationMode) { if (withAuthorizationMode < 0 || withAuthorizationMode > 2) { throw new IllegalArgumentException("Wrong authorization mode value"); } this.withAuthorizationMode = withAuthorizationMode; return this; } public Builder withReadWriteCheck() { this.withAuthorizationMode = AUTH_READ_WRITE; return this; } public Builder withReadCheck() { this.withAuthorizationMode = AUTH_READ; return this; } public Builder withNoCheck() { this.withAuthorizationMode = AUTH_NO_CHECK; return this; } public UserNodeFilterConfig build() { return new UserNodeFilterConfig(this); } } }