IDEA-133754 Maven: resources builder: support outputDirectory parameters of maven...
[idea/community.git] / plugins / maven / jps-plugin / src / org / jetbrains / jps / maven / model / impl / MavenModuleResourceConfiguration.java
1 /*
2  * Copyright 2000-2012 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.jps.maven.model.impl;
17
18 import com.intellij.openapi.util.io.FileUtil;
19 import com.intellij.util.xmlb.annotations.*;
20 import com.intellij.util.xmlb.annotations.AbstractCollection;
21 import gnu.trove.THashSet;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.annotations.Nullable;
24
25 import java.util.*;
26
27 /**
28  * @author Eugene Zhuravlev
29  *         Date: 10/20/12
30  */
31 public class MavenModuleResourceConfiguration {
32   @NotNull
33   @Tag("id")
34   public MavenIdBean id;
35
36   @Nullable
37   @Tag("parentId")
38   public MavenIdBean parentId;
39
40   @NotNull
41   @Tag("directory")
42   public String directory;
43
44   @NotNull
45   @Tag("delimiters-pattern")
46   public String delimitersPattern;
47
48   @Tag("model-map")
49   @MapAnnotation(surroundWithTag = false, surroundKeyWithTag = false, surroundValueWithTag = false)
50   public Map<String, String> modelMap = new HashMap<String, String>();
51
52   @Tag("properties")
53   @MapAnnotation(surroundWithTag = false, surroundKeyWithTag = false, surroundValueWithTag = false)
54   public Map<String, String> properties = new HashMap<String, String>();
55
56   @Tag("filtering-excluded-extensions")
57   @AbstractCollection(surroundWithTag = false, elementTag = "extension")
58   public Set<String> filteringExclusions = new THashSet<String>(FileUtil.PATH_HASHING_STRATEGY);
59
60   @OptionTag
61   public String escapeString = null;
62
63   @OptionTag
64   public boolean escapeWindowsPaths = true;
65
66   @OptionTag
67   public boolean overwrite;
68
69   @OptionTag
70   public String outputDirectory = null;
71
72   @OptionTag
73   public String testOutputDirectory = null;
74
75   @Tag("resources")
76   @AbstractCollection(surroundWithTag = false, elementTag = "resource")
77   public List<ResourceRootConfiguration> resources = new ArrayList<ResourceRootConfiguration>();
78
79   @Tag("test-resources")
80   @AbstractCollection(surroundWithTag = false, elementTag = "resource")
81   public List<ResourceRootConfiguration> testResources = new ArrayList<ResourceRootConfiguration>();
82
83   public Set<String> getFilteringExcludedExtensions() {
84     if (filteringExclusions.isEmpty()) {
85       return MavenProjectConfiguration.DEFAULT_FILTERING_EXCLUDED_EXTENSIONS;
86     }
87     final Set<String> result = new THashSet<String>(FileUtil.PATH_HASHING_STRATEGY);
88     result.addAll(MavenProjectConfiguration.DEFAULT_FILTERING_EXCLUDED_EXTENSIONS);
89     result.addAll(filteringExclusions);
90     return Collections.unmodifiableSet(result);
91   }
92
93   public int computeConfigurationHash(boolean forTestResources) {
94     int result = computeModuleConfigurationHash();
95
96     final List<ResourceRootConfiguration> _resources = forTestResources? testResources : resources;
97     result = 31 * result;
98     for (ResourceRootConfiguration resource : _resources) {
99       result += resource.computeConfigurationHash();
100     }
101     return result;
102   }
103
104   public int computeModuleConfigurationHash() {
105     int result = id.hashCode();
106     result = 31 * result + (parentId != null ? parentId.hashCode() : 0);
107     result = 31 * result + directory.hashCode();
108     result = 31 * result + delimitersPattern.hashCode();
109     result = 31 * result + modelMap.hashCode();
110     result = 31 * result + properties.hashCode();
111     result = 31 * result + filteringExclusions.hashCode();
112     result = 31 * result + (escapeString != null ? escapeString.hashCode() : 0);
113     result = 31 * result + (outputDirectory != null ? outputDirectory.hashCode() : 0);
114     result = 31 * result + (testOutputDirectory != null ? testOutputDirectory.hashCode() : 0);
115     result = 31 * result + (escapeWindowsPaths ? 1 : 0);
116     result = 31 * result + (overwrite ? 1 : 0);
117     return result;
118   }
119 }
120
121
122