/*
* Copyright 2017 the original author or authors.
*
* 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 org.gradle.plugins.ide.eclipse.model.internal;
import com.google.common.base.Objects;
import groovy.lang.Closure;
import groovy.lang.DelegatesTo;
import org.gradle.api.Action;
import org.gradle.api.InvalidUserDataException;
import org.gradle.api.internal.ClosureBackedAction;
import org.gradle.plugins.ide.eclipse.model.ResourceFilter;
import org.gradle.plugins.ide.eclipse.model.ResourceFilterAppliesTo;
import org.gradle.plugins.ide.eclipse.model.ResourceFilterMatcher;
import org.gradle.plugins.ide.eclipse.model.ResourceFilterType;
public final class DefaultResourceFilter implements ResourceFilter {
private ResourceFilterAppliesTo appliesTo = ResourceFilterAppliesTo.FILES_AND_FOLDERS;
private ResourceFilterType type = ResourceFilterType.EXCLUDE_ALL;
private boolean recursive = true;
private ResourceFilterMatcher matcher;
public DefaultResourceFilter() {
}
public DefaultResourceFilter(ResourceFilterAppliesTo appliesTo, ResourceFilterType type, boolean recursive, ResourceFilterMatcher matcher) {
this();
setAppliesTo(appliesTo);
setType(type);
setRecursive(recursive);
setMatcher(matcher);
}
@Override
public ResourceFilterAppliesTo getAppliesTo() {
return appliesTo;
}
@Override
public void setAppliesTo(ResourceFilterAppliesTo appliesTo) {
if (appliesTo == null) {
throw new InvalidUserDataException("appliesTo must not be null");
}
this.appliesTo = appliesTo;
}
@Override
public ResourceFilterType getType() {
return type;
}
@Override
public void setType(ResourceFilterType type) {
if (type == null) {
throw new InvalidUserDataException("type must not be null");
}
this.type = type;
}
@Override
public boolean isRecursive() {
return recursive;
}
@Override
public void setRecursive(boolean recursive) {
this.recursive = recursive;
}
@Override
public ResourceFilterMatcher getMatcher() {
return matcher;
}
public void setMatcher(ResourceFilterMatcher matcher) {
this.matcher = matcher;
}
public ResourceFilterMatcher matcher(@DelegatesTo(value = ResourceFilterMatcher.class, strategy = Closure.DELEGATE_FIRST) Closure configureClosure) {
return matcher(new ClosureBackedAction<ResourceFilterMatcher>(configureClosure));
}
@Override
public ResourceFilterMatcher matcher(Action<? super ResourceFilterMatcher> configureAction) {
if (this.matcher == null) {
this.matcher = new DefaultResourceFilterMatcher();
}
configureAction.execute(this.matcher);
return this.matcher;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null) {
return false;
}
if (!getClass().equals(o.getClass())) {
return false;
}
DefaultResourceFilter resourceFilter = (DefaultResourceFilter) o;
return Objects.equal(appliesTo, resourceFilter.appliesTo)
&& Objects.equal(type, resourceFilter.type)
&& Objects.equal(recursive, resourceFilter.recursive)
&& Objects.equal(matcher, resourceFilter.matcher);
}
@Override
public int hashCode() {
int result;
result = appliesTo != null ? appliesTo.hashCode() : 0;
result = 31 * result + (type != null ? type.hashCode() : 0);
result = 31 * result + Boolean.valueOf(recursive).hashCode();
result = 31 * result + (matcher != null ? matcher.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "ResourceFilter{"
+ "appliesTo='" + appliesTo + '\''
+ ", type='" + type + '\''
+ ", recursive='" + recursive + '\''
+ ", matcher='" + matcher + '\''
+ '}';
}
}