1(*
2
3  Licensed to the Apache Software Foundation (ASF) under one
4  or more contributor license agreements.  See the NOTICE file
5  distributed with this work for additional information
6  regarding copyright ownership.  The ASF licenses this file
7  to you under the Apache License, Version 2.0 (the
8  "License"); you may not use this file except in compliance
9  with the License.  You may obtain a copy of the License at
10
11    http://www.apache.org/licenses/LICENSE-2.0
12
13  Unless required by applicable law or agreed to in writing,
14  software distributed under the License is distributed on an
15  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  KIND, either express or implied.  See the License for the
17  specific language governing permissions and limitations
18  under the License.
19
20
21
22This script is meant to
23	1) Identify installed instances of the product
24	2) check whether the user has write-access (and if not
25	ask for authentification)
26	3) install the shipped tarball
27*)
28
29-- strings for localisations - to be meant to be replaced
30-- by a makefile or similar
31set OKLabel to "[OKLabel]"
32set InstallLabel to "[InstallLabel]"
33set AbortLabel to "[AbortLabel]"
34set intro to "[IntroText1]
35
36[IntroText2]
37
38[IntroText3]"
39set chooseMyOwn to "[ChooseMyOwnText]"
40set listPrompt to "[ListPromptText]"
41set chooseManual to "[ChooseManualText]"
42set listOKLabel to "[ListOKLabelText]"
43set listCancelLabel to "[ListCancelLabel]"
44set appInvalid to "[AppInvalidText1]
45
46[AppInvalidText2]" -- string will begin with the chosen application's name
47set startInstall to "[StartInstallText1]
48
49[StartInstallText2]"
50set IdentifyQ to "[IdentifyQText]
51
52[IdentifyQText2]"
53set IdentifyYES to "[IdentifyYES]"
54set IdentifyNO to "[IdentifyNO]"
55set installFailed to "[InstallFailedText]"
56set installComplete to "[InstallCompleteTextPatch]"
57
58set sourcedir to (do shell script "dirname " & quoted form of POSIX path of (path to of me))
59
60display dialog intro buttons {AbortLabel, InstallLabel} default button 2
61
62if (button returned of result) is AbortLabel then
63	return 2
64end if
65
66set the found_ooos_all to (do shell script "mdfind \"kMDItemContentType == 'com.apple.application-bundle' && kMDItemDisplayName == '[PRODUCTNAME]*' && kMDItemDisplayName != '[FULLAPPPRODUCTNAME].app'\"") & "
67" & chooseMyOwn
68
69set found_ooos_all_paragraphs to paragraphs in found_ooos_all
70
71set found_ooos to {}
72repeat with currentApp in found_ooos_all_paragraphs
73	if currentApp does not start with "/Volumes" then
74		copy currentApp to the end of found_ooos
75	end if
76end repeat
77
78-- repeat with oneApp in found_ooos
79--  display dialog oneApp
80-- end repeat
81
82-- the choice returned is of type "list"
83-- Show selection dialog only if more than one or no product was found
84-- The first item is an empty string, if no app was found and no app started with "/Volumes"
85-- The first item is chooseMyOwn, if no app was found and at least one app started with "/Volumes"
86if (get first item of found_ooos as string) is "" then
87  set the choice to (choose from list found_ooos default items (get second item of found_ooos) with prompt listPrompt OK button name listOKLabel cancel button name listCancelLabel)
88  if choice is false then
89	  -- do nothing, the user cancelled the installation
90    	return 2 --aborted by user
91  else if (choice as string) is chooseMyOwn then
92	  -- yeah, one needs to use "choose file", otherwise
93	  -- the user would not be able to select the .app
94	  set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
95  end if
96else if (get first item of found_ooos as string) is chooseMyOwn then
97  set the choice to (choose from list found_ooos default items (get first item of found_ooos) with prompt listPrompt OK button name listOKLabel cancel button name listCancelLabel)
98  if choice is false then
99	  -- do nothing, the user cancelled the installation
100    	return 2 --aborted by user
101  else if (choice as string) is chooseMyOwn then
102	  -- yeah, one needs to use "choose file", otherwise
103	  -- the user would not be able to select the .app
104	  set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
105  end if
106else if (get second item of found_ooos as string) is chooseMyOwn then
107  -- set choice to found installation
108  -- set the choice to (get first paragraph of found_ooos)
109  set the choice to (get first item of found_ooos)
110else
111  set the choice to (choose from list found_ooos default items (get first item of found_ooos) with prompt listPrompt OK button name listOKLabel cancel button name listCancelLabel)
112  if choice is false then
113	  -- do nothing, the user cancelled the installation
114    	return 2 --aborted by user
115  else if (choice as string) is chooseMyOwn then
116	  -- yeah, one needs to use "choose file", otherwise
117	  -- the user would not be able to select the .app
118	  set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
119  end if
120end if
121
122-- now only check whether the path is really from [PRODUCTNAME]
123try
124	do shell script "grep '<string>[PRODUCTNAME] [PRODUCTVERSION]'   " & quoted form of (choice as string) & "/Contents/Info.plist"
125on error
126	display dialog (choice as string) & appInvalid buttons {InstallLabel} default button 1 with icon 0
127	return 3 --wrong target-directory
128end try
129
130(*
131display dialog startInstall buttons {AbortLabel, InstallLabel} default button 2
132
133if (button returned of result) is AbortLabel then
134	return 2
135end if
136*)
137
138set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2"
139try
140	do shell script tarCommand
141
142on error errMSG number errNUM
143	display dialog IdentifyQ buttons {IdentifyYES, IdentifyNO} with icon 2
144	if (button returned of result) is IdentifyYES then
145		try
146			do shell script tarCommand with administrator privileges
147		on error errMSG number errNUM
148			display dialog installFailed buttons {OKLabel} default button 1 with icon 0
149			-- -60005 username/password wrong
150			-- -128   aborted by user
151			-- 2 error from tar - tarball not found (easy to test)
152			return errNUM
153		end try
154	else
155		return 2 -- aborted by user
156	end if
157end try
158
159display dialog installComplete buttons {OKLabel} default button 1
160