Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.installer / org.gvsig.desktop.installer.izpack / src / main / scripts / Helper.groovy @ 42794

History | View | Annotate | Download (10.7 KB)

1

    
2
import WebDAVClient
3
import java.io.File
4

    
5
public class Helper {
6

    
7
  public ant = null
8

    
9
  private projectBaseFile = null
10
  private packageinfo = null
11
  private project = null
12
  private log = null
13

    
14
  public Helper(logger,project) {
15
    this.project = project
16
    log = logger
17
    //log.info("Helper(...)")
18

    
19
    ant = new AntBuilder()
20
  }
21

    
22
  def copyDirToDir(source, target) {
23
    //log.info("copyDirToDir "+source+","+target)
24
    if( source instanceof File ) {
25
      source = source.getAbsolutePath()
26
    }
27
    if( target instanceof File ) {
28
      target = target.getAbsolutePath()
29
    }
30
    if( !target.endsWith("/") ) {
31
      target += "/"
32
    }
33
    ant.copy( todir: target ) {
34
      fileset( dir:source )
35
    }
36
  }
37

    
38
  def moveDirToDir(source, target) {
39
    //log.info("moveDirToDir "+source+","+target)
40
    if( source instanceof File ) {
41
      source = source.getAbsolutePath()
42
    }
43
    if( target instanceof File ) {
44
      target = target.getAbsolutePath()
45
    }
46
    if( !target.endsWith("/") ) {
47
      target += "/"
48
    }
49
    ant.move( todir: target ) {
50
      fileset( dir: source )
51
    }
52
  }
53

    
54
  def copyFileToDir(source, target) {
55
    //log.info("copyFileToDir "+source+","+target)
56
    if( source instanceof File ) {
57
      source = source.getAbsolutePath()
58
    }
59
    if( target instanceof File ) {
60
      target = target.getAbsolutePath()
61
    }
62
    if( !target.endsWith("/") ) {
63
      target += "/"
64
    }
65
    ant.copy(file:source, todir:target)
66
  }
67

    
68
  def copyFileToFile(source, target) {
69
    //log.info("copyFileToFile "+source+","+target)
70
    if( source instanceof File ) {
71
      source = source.getAbsolutePath()
72
    }
73
    if( target instanceof File ) {
74
      target = target.getAbsolutePath()
75
    }
76
    ant.copy(file:source, tofile:target)
77
  }
78

    
79
  def getProjectBaseFolder(Object[] args ) {
80
    if( projectBaseFile == null ) {
81
      projectBaseFile = project.basedir
82
      def f = new File(projectBaseFile,"/src/main/scripts/Helper.groovy")
83
      if( !f.exists() ) {
84
        projectBaseFile = projectBaseFile.getParentFile()
85
      }
86
    }
87
    def f = projectBaseFile
88
    args.each {
89
      f = new File(f,it)
90
    }
91
    return f
92
  }
93

    
94
  def getProjectTargetFolder(Object[] args) {
95
    return getProjectBaseFolder("target", *args)
96
  }
97

    
98
  def getProductFolderPath() {
99
      return project.properties["gvsig.product.folder.path"]
100
  }
101

    
102
  def getInstallationFolder(Object[] args) {
103
    return getProjectBaseFolder("target", "product", "gvsig-desktop", *args)
104
  }
105

    
106
  def getVersionWithBuildNumber() {
107
      def ver = getPackageinfo().getProperty("version")
108
      if( ver.contains("-") ) {
109
        return ver
110
      } else {
111
        return ver +"-"+getPackageinfo().getProperty("buildNumber")
112
      }
113
  }
114

    
115
  def getVersionWithoutBuildNumber() {
116
      def ver = getPackageinfo().getProperty("version")
117
      if( ver.contains("-") ) {
118
        return ver.replaceFirst("-[0-9]*\$","")
119
      } else {
120
        return ver
121
      }
122
  }
123

    
124
  def createLauncher(source,target) {
125
      //log.info("Creating launcher ("+source+")...")
126
      source = getProjectBasePath() + source
127
      target = getProjectBasePath() + target
128
      s = new File(source).text
129
      s = s.replaceAll("@@gvsig.product.folder.path@@", getInstallationFolder().getAbsolutePath())
130
      s = s.replaceAll("@@org.gvsig.andami.updater.jar@@", getAndamiUpdaterJarName())
131
      s = s.replaceAll("@@version@@", getVersionWithBuildNumber().replace("-","."))
132
      new File(target).write(s)
133
      log.info("Created "+target)
134
      ant.exec( command:"launch4jc "+ target )
135
      log.info("Created launcher ("+target+").")
136
  }
137

    
138
  def getPackageinfo() {
139
    if( packageinfo == null ) {
140
      File file = getInstallationFolder("gvSIG","extensiones","org.gvsig.app.mainplugin","package.info")
141
      log.info("read package.info from "+file.getAbsolutePath())
142
      def p = new Properties()
143
      p.load(file.newDataInputStream())
144
      packageinfo = p
145
      project.properties["package.info.version"] = getVersionWithBuildNumber()
146
      project.properties["package.info.buildNumber"] = p.getProperty("buildNumber")
147
      project.properties["package.info.state"] = p.getProperty("state")
148
    }
149
    return packageinfo
150
  }
151

    
152
  def readPackageInfo() {
153
    getPackageinfo()
154
  }
155

    
156
  def getWebDAVClient(log) {
157
          def user
158
          def password
159
          if( project.properties["username"] == null ) {
160
              print("Enter user name: ");
161
              user = System.console().readLine().toString()
162
              if( user != "" ) {
163
                  project.properties.setProperty("username",user);
164
              }
165
          }
166
          if( project.properties["password"] == null ) {
167
              print("Enter password for user '" + project.properties["username"] + "': ");
168
              password = System.console().readPassword().toString()
169
              if( password != "" ) {
170
                  project.properties.setProperty("password",password);
171
              }
172
          }
173
          def session = new WebDAVClient(log)
174
          if( project.properties["username"] == null || project.properties["password"] == null ) {
175
              log.info("[WEBDAV] creating non authenticated session.");
176
              log.info("[WEBDAV] Use -Dusername=USER -Dpassword=PASSWORD to create a authenticated session.");
177
              session.login();
178
          } else {
179
              session.login(project.properties["username"], project.properties["password"]);
180
          }
181
          return session
182
  }
183

    
184
  def getAddOnRepoURL() {
185
          return "https://downloads.gvsig.org/download/gvsig-desktop-testing" +
186
              "/dists/" +
187
              getVersionWithoutBuildNumber() +
188
              "/builds/" +
189
              getPackageinfo().getProperty("buildNumber")
190
  }
191

    
192
  def getInstallerName(suffix) {
193
          return "gvSIG-desktop-" +
194
            getVersionWithBuildNumber() +
195
            "-" +
196
            getPackageinfo().getProperty("state") +
197
            suffix
198
  }
199

    
200

    
201
  def download_jre() {
202
      jre_pkg_name = "gvSIG-desktop-2.1.0-jre_7_windows_i586-1.7.72-0-devel-win-x86-j1_7.gvspkg"
203
      url = "http://downloads.gvsig.org/download/gvsig-desktop/pool/jre_7_windows_i586/" + jre_pkg_name
204
      target = new File(getProjectTargetFolder() , jre_pkg_name).getAbsolutePath()
205
      jre_path = System.getenv()["jre_gvspkg_path"]
206
      if(! new File(target).exists() ) {
207
        if( jre_path!=null ) {
208
          if( jre_path.endsWith(".gvspkg") ) {
209
            source = jre_path
210
          } else {
211
            source = jre_path + "/" + jre_pkg_name
212
          }
213
          if (source.startsWith("~" + File.separator)) {
214
              source = System.getenv().get("HOME") + source.substring(1);
215
          }
216
          if( ! new File(source).exists() ) {
217
            log.info("jre specified in jre_path variable not found - "+source)
218
            log.info("Downloading windows jre plugin")
219
            ant.get(src: url, dest: target)
220
          } else {
221
            log.info("Copy windows jre plugin")
222
            copyFileToDir(source, getProjectTargetFolder())
223

    
224
          }
225
        } else {
226
          log.info("Downloading windows jre plugin")
227
          ant.get(src: url, dest: target)
228
        }
229
      } else {
230
        log.info("Skip download of jre, it exist in local filesystem.")
231
      }
232
  }
233

    
234
  def getAndamiUpdaterJarName() {
235
    def org_gvsig_andami_updater_jar = new FileNameFinder().getFileNames(
236
      getInstallationFolder("lib").getAbsolutePath(),
237
      'org.gvsig.andami.updater-*.jar'
238
    )[0]
239
    if( org_gvsig_andami_updater_jar == null ) {
240
      log.error("Can't find andami updater jar")
241
      assert false
242
    }
243
    org_gvsig_andami_updater_jar = new File(org_gvsig_andami_updater_jar).getName()
244
    return org_gvsig_andami_updater_jar
245
  }
246

    
247
  def copy_common_install_files(targetdir) {
248
    copyFileToDir(getProjectBaseFolder("src","main","izpack","addonmanager.html"),targetdir)
249
    copyFileToDir(getProjectBaseFolder("src","main","izpack","readme.html"),targetdir)
250
    copyFileToDir(getProjectBaseFolder("target","product","gvsig-desktop","LICENSE.txt"),targetdir)
251
  }
252

    
253
  def copy_extractpackages_jar(targetdir) {
254
    def org_gvsig_desktop_installer_izpack_extractpackages_jar = new FileNameFinder().getFileNames(
255
      getProjectBaseFolder("org.gvsig.desktop.installer.izpack.extractpackages","target").getAbsolutePath(),
256
      "org.gvsig.desktop.installer.izpack.extractpackages-*.jar",
257
      "*-sources.jar"
258
    )[0]
259

    
260
    copyFileToFile(
261
      org_gvsig_desktop_installer_izpack_extractpackages_jar,
262
      new File(targetdir, "org.gvsig.desktop.installer.izpack.extractpackages.jar")
263
    )
264

    
265
  }
266

    
267
  def copy_copyjre_jar(targetdir) {
268
    def org_gvsig_desktop_installer_izpack_copyjre_jar = new FileNameFinder().getFileNames(
269
      getProjectBaseFolder("org.gvsig.desktop.installer.izpack.copyjre","target").getAbsolutePath(),
270
      "org.gvsig.desktop.installer.izpack.copyjre-*.jar",
271
      "*-sources.jar"
272
    )[0]
273

    
274
    copyFileToFile(
275
      org_gvsig_desktop_installer_izpack_copyjre_jar,
276
      new File(targetdir, "org.gvsig.desktop.installer.izpack.copyjre.jar")
277
    )
278

    
279
  }
280

    
281
  def expand(s) {
282

    
283
    def t = "target/portable/gvSIG-desktop-"+this.getVersionWithoutBuildNumber()
284
    def install_path = new File(project.basedir, t).getAbsolutePath()
285
    s = s.replace("\${product.folder}",this.getInstallationFolder().getAbsolutePath())
286
    s = s.replace("\${INSTALL_PATH}",install_path)
287
    s = s.replace("\$INSTALL_PATH",install_path)
288
    return s
289
  }
290

    
291
  def prepare_portable() {
292

    
293
    def t = "target/portable/gvSIG-desktop-"+this.getVersionWithoutBuildNumber()
294
    def install_path = new File(project.basedir, t).getAbsoluteFile()
295
    install_path.mkdirs()
296

    
297
    def target = new File(project.basedir, "target")
298
    def installfile = new File(target,"install.xml")
299
    def install = new XmlSlurper().parse(installfile)
300
    install.packs.each {
301
      it.pack.each {
302
        it.file.each {
303
          def src = new File(expand(it.@src.text()))
304
          if( !src.isAbsolute() ) {
305
            src = new File(target,src.getPath())
306
          }
307
          def targetdir = expand(it.@targetdir.text())
308
          this.copyFileToDir(src,targetdir)
309
        }
310
        it.fileset.each {
311
          def src = new File(expand(it.@dir.text()))
312
          if( !src.isAbsolute() ) {
313
            src = new File(target,src.getPath())
314
          }
315
          def targetdir = expand(it.@targetdir.text())
316
          this.copyDirToDir(src,targetdir)
317
        }
318
        it.executable.each {
319
          def targetfile = new File(expand(it.@targetfile.text()))
320
          targetfile.setExecutable(true)
321
        }
322
      }
323
    }
324

    
325
    this.copyDirToDir(
326
      this.getInstallationFolder("gvSIG/extensiones/org.gvsig.coreplugin.app.mainplugin"),
327
      new File(install_path,"gvSIG/extensiones/org.gvsig.coreplugin.app.mainplugin")
328
    )
329
    this.copyDirToDir(
330
      this.getInstallationFolder("gvSIG/extensiones/org.gvsig.installer.app.mainplugin"),
331
      new File(install_path,"gvSIG/extensiones/org.gvsig.installer.app.mainplugin")
332
    )
333
  }
334

    
335
  def pack_portable() {
336

    
337
    def t = "target/portable/gvSIG-desktop-"+this.getVersionWithoutBuildNumber()
338
    def install_path = new File(project.basedir, t).getAbsoluteFile()
339
    def target = new File(project.basedir, "target")
340

    
341
    def portablezip = new File(target,this.getInstallerName(
342
      "-" +
343
      project.properties["installer_os"] +
344
      "-" +
345
      project.properties["installer_architecture"] +
346
      "-online.zip"
347
    ))
348

    
349
    this.ant.zip(
350
      destfile: portablezip,
351
      basedir: install_path
352
    )
353
  }
354

    
355
}