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