Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/ibatis/db/sqlmap/upgrade/ConvertTask.java


1   /*
2    *  Copyright 2004 Clinton Begin
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 com.ibatis.db.sqlmap.upgrade;
17  
18  import org.apache.tools.ant.BuildException;
19  import org.apache.tools.ant.Project;
20  import org.apache.tools.ant.taskdefs.Copy;
21  import org.apache.tools.ant.types.FilterSet;
22  import org.apache.tools.ant.types.FilterSetCollection;
23  
24  import java.io.File;
25  import java.io.IOException;
26  import java.util.Enumeration;
27  
28  /**
29   * Extends the ant copy task to convert SQL Map files from v.1.x to v.2.x.
30   * <p/>
31   * Extends Ant version 1.5.4. Changes/extensions marked inline below
32   */
33  public class ConvertTask extends Copy {
34  
35    private static final SqlMapXmlConverter CONVERTER = new SqlMapXmlConverter();
36  
37    /**
38     * Overrides Ant Copy tasks file copy method.
39     */
40    protected void doFileOperations() {
41      if (fileCopyMap.size() > 0) {
42        log("Copying " + fileCopyMap.size()
43            + " file" + (fileCopyMap.size() == 1 ? "" : "s")
44            + " to " + destDir.getAbsolutePath());
45  
46        Enumeration e = fileCopyMap.keys();
47        while (e.hasMoreElements()) {
48          String fromFile = (String) e.nextElement();
49          String toFile = (String) fileCopyMap.get(fromFile);
50  
51          if (fromFile.equals(toFile)) {
52            log("Skipping self-copy of " + fromFile, verbosity);
53            continue;
54          }
55  
56          try {
57            log("Copying " + fromFile + " to " + toFile, verbosity);
58  
59            FilterSetCollection executionFilters =
60                new FilterSetCollection();
61            if (filtering) {
62              executionFilters
63                  .addFilterSet(getProject().getGlobalFilterSet());
64            }
65            for (Enumeration filterEnum = getFilterSets().elements();
66                 filterEnum.hasMoreElements();) {
67              executionFilters
68                  .addFilterSet((FilterSet) filterEnum.nextElement());
69            }
70  
71            // --------------------------------------
72  
73            File temp = File.createTempFile("sql-map-", "-temp");
74  
75            CONVERTER.convertFile(new File(fromFile), temp);
76  
77            getFileUtils().copyFile(temp, new File(toFile), executionFilters,
78                getFilterChains(), forceOverwrite,
79                preserveLastModified, getEncoding(),
80                getProject());
81  
82            // --------------------------------------
83  
84          } catch (IOException ioe) {
85            String msg = "Failed to copy " + fromFile + " to " + toFile
86                + " due to " + ioe.getMessage();
87            File targetFile = new File(toFile);
88            if (targetFile.exists() && !targetFile.delete()) {
89              msg += " and I couldn't delete the corrupt " + toFile;
90            }
91            throw new BuildException(msg, ioe, getLocation());
92          }
93        }
94      }
95  
96      if (includeEmpty) {
97        Enumeration e = dirCopyMap.elements();
98        int count = 0;
99        while (e.hasMoreElements()) {
100         File d = new File((String) e.nextElement());
101         if (!d.exists()) {
102           if (!d.mkdirs()) {
103             log("Unable to create directory "
104                 + d.getAbsolutePath(), Project.MSG_ERR);
105           } else {
106             count++;
107           }
108         }
109       }
110 
111       if (count > 0) {
112         log("Copied " + count +
113             " empty director" +
114             (count == 1 ? "y" : "ies") +
115             " to " + destDir.getAbsolutePath());
116       }
117     }
118   }
119 
120 }