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 
22 This 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
31 set OKLabel to "[OKLabel]"
32 set InstallLabel to "[InstallLabel]"
33 set AbortLabel to "[AbortLabel]"
34 set intro to "[IntroText1]
35 
36 [IntroText2]
37 
38 [IntroText3]"
39 set chooseMyOwn to "[ChooseMyOwnText]"
40 set listPrompt to "[ListPromptText]"
41 set chooseManual to "[ChooseManualText]"
42 set listOKLabel to "[ListOKLabelText]"
43 set listCancelLabel to "[ListCancelLabel]"
44 set appInvalid to "[AppInvalidText1]
45 
46 [AppInvalidText2]" -- string will begin with the chosen application's name
47 set startInstall to "[StartInstallText1]
48 
49 [StartInstallText2]"
50 set IdentifyQ to "[IdentifyQText]
51 
52 [IdentifyQText2]"
53 set IdentifyYES to "[IdentifyYES]"
54 set IdentifyNO to "[IdentifyNO]"
55 set installFailed to "[InstallFailedText]"
56 set installComplete to "[InstallCompleteText]
57 
58 [InstallCompleteText2]"
59 
60 set sourcedir to (do shell script "dirname " & quoted form of POSIX path of (path to of me))
61 
62 display dialog intro buttons {AbortLabel, InstallLabel} default button 2
63 
64 if (button returned of result) is AbortLabel then
65 	return 2
66 end if
67 
68 set the found_ooos_all to (do shell script "mdfind \"kMDItemContentType == 'com.apple.application-bundle' && kMDItemDisplayName == '[PRODUCTNAME]*' && kMDItemDisplayName != '[FULLAPPPRODUCTNAME].app'\"") & "
69 " & chooseMyOwn
70 
71 set found_ooos_all_paragraphs to paragraphs in found_ooos_all
72 
73 set found_ooos to {}
74 repeat with currentApp in found_ooos_all_paragraphs
75 	if currentApp does not start with "/Volumes" then
76 		copy currentApp to the end of found_ooos
77 	end if
78 end repeat
79 
80 -- repeat with oneApp in found_ooos
81 --  display dialog oneApp
82 -- end repeat
83 
84 -- the choice returned is of type "list"
85 -- Show selection dialog only if more than one or no product was found
86 -- The first item is an empty string, if no app was found and no app started with "/Volumes"
87 -- The first item is chooseMyOwn, if no app was found and at least one app started with "/Volumes"
88 if (get first item of found_ooos as string) is "" then
89   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)
90   if choice is false then
91 	  -- do nothing, the user cancelled the installation
92     	return 2 --aborted by user
93   else if (choice as string) is chooseMyOwn then
94 	  -- yeah, one needs to use "choose file", otherwise
95 	  -- the user would not be able to select the .app
96 	  set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
97   end if
98 else if (get first item of found_ooos as string) is chooseMyOwn then
99   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)
100   if choice is false then
101 	  -- do nothing, the user cancelled the installation
102     	return 2 --aborted by user
103   else if (choice as string) is chooseMyOwn then
104 	  -- yeah, one needs to use "choose file", otherwise
105 	  -- the user would not be able to select the .app
106 	  set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
107   end if
108 else if (get second item of found_ooos as string) is chooseMyOwn then
109   -- set choice to found installation
110   -- set the choice to (get first paragraph of found_ooos)
111   set the choice to (get first item of found_ooos)
112 else
113   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)
114   if choice is false then
115 	  -- do nothing, the user cancelled the installation
116     	return 2 --aborted by user
117   else if (choice as string) is chooseMyOwn then
118 	  -- yeah, one needs to use "choose file", otherwise
119 	  -- the user would not be able to select the .app
120 	  set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
121   end if
122 end if
123 
124 -- now only check whether the path is really from [PRODUCTNAME]
125 try
126 	do shell script "grep '<string>[PRODUCTNAME] [PRODUCTVERSION]'   " & quoted form of (choice as string) & "/Contents/Info.plist"
127 on error
128 	display dialog (choice as string) & appInvalid buttons {InstallLabel} default button 1 with icon 0
129 	return 3 --wrong target-directory
130 end try
131 
132 (*
133 display dialog startInstall buttons {AbortLabel, InstallLabel} default button 2
134 
135 if (button returned of result) is AbortLabel then
136 	return 2
137 end if
138 *)
139 
140 set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2"
141 try
142 	do shell script tarCommand
143 
144 on error errMSG number errNUM
145 	display dialog IdentifyQ buttons {IdentifyYES, IdentifyNO} with icon 2
146 	if (button returned of result) is IdentifyYES then
147 		try
148 			do shell script tarCommand with administrator privileges
149 		on error errMSG number errNUM
150 			display dialog installFailed buttons {OKLabel} default button 1 with icon 0
151 			-- -60005 username/password wrong
152 			-- -128   aborted by user
153 			-- 2 error from tar - tarball not found (easy to test)
154 			return errNUM
155 		end try
156 	else
157 		return 2 -- aborted by user
158 	end if
159 end try
160 
161 display dialog installComplete buttons {OKLabel} default button 1
162