1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_desktop.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "com/sun/star/ucb/XCommandEnvironment.hpp"
28*b1cdbd2cSJim Jagielski #include "com/sun/star/lang/IllegalArgumentException.hpp"
29*b1cdbd2cSJim Jagielski #include "xmlscript/xml_helper.hxx"
30*b1cdbd2cSJim Jagielski #include "ucbhelper/content.hxx"
31*b1cdbd2cSJim Jagielski #include <list>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include "dp_ucb.h"
34*b1cdbd2cSJim Jagielski #include "rtl/ustrbuf.hxx"
35*b1cdbd2cSJim Jagielski #include "dp_properties.hxx"
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski namespace lang  = com::sun::star::lang;
38*b1cdbd2cSJim Jagielski namespace task = com::sun::star::task;
39*b1cdbd2cSJim Jagielski namespace ucb = com::sun::star::ucb;
40*b1cdbd2cSJim Jagielski namespace uno = com::sun::star::uno;
41*b1cdbd2cSJim Jagielski namespace css = com::sun::star;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #define OUSTR(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference;
46*b1cdbd2cSJim Jagielski using ::rtl::OUString;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski #define PROP_SUPPRESS_LICENSE "SUPPRESS_LICENSE"
49*b1cdbd2cSJim Jagielski #define PROP_EXTENSION_UPDATE "EXTENSION_UPDATE"
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski namespace dp_manager {
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski //Reading the file
ExtensionProperties(OUString const & urlExtension,Reference<ucb::XCommandEnvironment> const & xCmdEnv)54*b1cdbd2cSJim Jagielski ExtensionProperties::ExtensionProperties(
55*b1cdbd2cSJim Jagielski     OUString const & urlExtension,
56*b1cdbd2cSJim Jagielski     Reference<ucb::XCommandEnvironment> const & xCmdEnv) :
57*b1cdbd2cSJim Jagielski     m_xCmdEnv(xCmdEnv)
58*b1cdbd2cSJim Jagielski {
59*b1cdbd2cSJim Jagielski     m_propFileUrl = urlExtension + OUSTR("properties");
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski     ::std::list< ::std::pair< OUString, OUString> > props;
62*b1cdbd2cSJim Jagielski     if (! dp_misc::create_ucb_content(NULL, m_propFileUrl, 0, false))
63*b1cdbd2cSJim Jagielski         return;
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski     ::ucbhelper::Content contentProps(m_propFileUrl, m_xCmdEnv);
66*b1cdbd2cSJim Jagielski     dp_misc::readProperties(props, contentProps);
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski     typedef ::std::list< ::std::pair< OUString, OUString> >::const_iterator CI;
69*b1cdbd2cSJim Jagielski     for (CI i = props.begin(); i != props.end(); i++)
70*b1cdbd2cSJim Jagielski     {
71*b1cdbd2cSJim Jagielski         if (i->first.equals(OUSTR(PROP_SUPPRESS_LICENSE)))
72*b1cdbd2cSJim Jagielski             m_prop_suppress_license = i->second;
73*b1cdbd2cSJim Jagielski     }
74*b1cdbd2cSJim Jagielski }
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski //Writing the file
ExtensionProperties(OUString const & urlExtension,uno::Sequence<css::beans::NamedValue> const & properties,Reference<ucb::XCommandEnvironment> const & xCmdEnv)77*b1cdbd2cSJim Jagielski ExtensionProperties::ExtensionProperties(
78*b1cdbd2cSJim Jagielski     OUString const & urlExtension,
79*b1cdbd2cSJim Jagielski     uno::Sequence<css::beans::NamedValue> const & properties,
80*b1cdbd2cSJim Jagielski     Reference<ucb::XCommandEnvironment> const & xCmdEnv) :
81*b1cdbd2cSJim Jagielski     m_xCmdEnv(xCmdEnv)
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski     m_propFileUrl = urlExtension + OUSTR("properties");
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski     for (sal_Int32 i = 0; i < properties.getLength(); i++)
86*b1cdbd2cSJim Jagielski     {
87*b1cdbd2cSJim Jagielski         css::beans::NamedValue const & v = properties[i];
88*b1cdbd2cSJim Jagielski         if (v.Name.equals(OUSTR(PROP_SUPPRESS_LICENSE)))
89*b1cdbd2cSJim Jagielski         {
90*b1cdbd2cSJim Jagielski             m_prop_suppress_license = getPropertyValue(v);
91*b1cdbd2cSJim Jagielski         }
92*b1cdbd2cSJim Jagielski         else if (v.Name.equals(OUSTR(PROP_EXTENSION_UPDATE)))
93*b1cdbd2cSJim Jagielski         {
94*b1cdbd2cSJim Jagielski             m_prop_extension_update = getPropertyValue(v);
95*b1cdbd2cSJim Jagielski         }
96*b1cdbd2cSJim Jagielski         else
97*b1cdbd2cSJim Jagielski         {
98*b1cdbd2cSJim Jagielski             throw lang::IllegalArgumentException(
99*b1cdbd2cSJim Jagielski                 OUSTR("Extension Manager: unknown property"), 0, -1);
100*b1cdbd2cSJim Jagielski         }
101*b1cdbd2cSJim Jagielski     }
102*b1cdbd2cSJim Jagielski }
103*b1cdbd2cSJim Jagielski 
getPropertyValue(css::beans::NamedValue const & v)104*b1cdbd2cSJim Jagielski OUString ExtensionProperties::getPropertyValue(css::beans::NamedValue const & v)
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski     OUString value(OUSTR("0"));
107*b1cdbd2cSJim Jagielski     if (v.Value >>= value)
108*b1cdbd2cSJim Jagielski     {
109*b1cdbd2cSJim Jagielski         if (value.equals(OUSTR("1")))
110*b1cdbd2cSJim Jagielski             value = OUSTR("1");
111*b1cdbd2cSJim Jagielski     }
112*b1cdbd2cSJim Jagielski     else
113*b1cdbd2cSJim Jagielski     {
114*b1cdbd2cSJim Jagielski         throw lang::IllegalArgumentException(
115*b1cdbd2cSJim Jagielski             OUSTR("Extension Manager: wrong property value"), 0, -1);
116*b1cdbd2cSJim Jagielski     }
117*b1cdbd2cSJim Jagielski     return value;
118*b1cdbd2cSJim Jagielski }
write()119*b1cdbd2cSJim Jagielski void ExtensionProperties::write()
120*b1cdbd2cSJim Jagielski {
121*b1cdbd2cSJim Jagielski     ::ucbhelper::Content contentProps(m_propFileUrl, m_xCmdEnv);
122*b1cdbd2cSJim Jagielski     ::rtl::OUStringBuffer buf;
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski     if (m_prop_suppress_license)
125*b1cdbd2cSJim Jagielski     {
126*b1cdbd2cSJim Jagielski         buf.append(OUSTR(PROP_SUPPRESS_LICENSE));
127*b1cdbd2cSJim Jagielski         buf.append(OUSTR("="));
128*b1cdbd2cSJim Jagielski         buf.append(*m_prop_suppress_license);
129*b1cdbd2cSJim Jagielski     }
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski     ::rtl::OString stamp = ::rtl::OUStringToOString(
132*b1cdbd2cSJim Jagielski         buf.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
133*b1cdbd2cSJim Jagielski     Reference<css::io::XInputStream> xData(
134*b1cdbd2cSJim Jagielski         ::xmlscript::createInputStream(
135*b1cdbd2cSJim Jagielski             ::rtl::ByteSequence(
136*b1cdbd2cSJim Jagielski                 reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
137*b1cdbd2cSJim Jagielski                 stamp.getLength() ) ) );
138*b1cdbd2cSJim Jagielski     contentProps.writeStream( xData, true /* replace existing */ );
139*b1cdbd2cSJim Jagielski }
140*b1cdbd2cSJim Jagielski 
isSuppressedLicense()141*b1cdbd2cSJim Jagielski bool ExtensionProperties::isSuppressedLicense()
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski     bool ret = false;
144*b1cdbd2cSJim Jagielski     if (m_prop_suppress_license)
145*b1cdbd2cSJim Jagielski     {
146*b1cdbd2cSJim Jagielski         if (m_prop_suppress_license->equals(OUSTR("1")))
147*b1cdbd2cSJim Jagielski             ret = true;
148*b1cdbd2cSJim Jagielski     }
149*b1cdbd2cSJim Jagielski     return ret;
150*b1cdbd2cSJim Jagielski }
151*b1cdbd2cSJim Jagielski 
isExtensionUpdate()152*b1cdbd2cSJim Jagielski bool ExtensionProperties::isExtensionUpdate()
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski     bool ret = false;
155*b1cdbd2cSJim Jagielski     if (m_prop_extension_update)
156*b1cdbd2cSJim Jagielski     {
157*b1cdbd2cSJim Jagielski         if (m_prop_extension_update->equals(OUSTR("1")))
158*b1cdbd2cSJim Jagielski             ret = true;
159*b1cdbd2cSJim Jagielski     }
160*b1cdbd2cSJim Jagielski     return ret;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski } // namespace dp_manager
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski 
166