--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch;
+
+import org.apache.commons.configuration.BaseConfiguration;
+
+import org.sonar.api.database.DatabaseSession;
+import org.sonar.api.database.configuration.Property;
+import org.sonar.api.database.model.ResourceModel;
+
+import java.util.List;
+
+/**
+ * @deprecated in 3.7. Replaced by {@link org.sonar.api.config.Settings}
+ */
+@Deprecated
+public class ResourceDatabaseConfiguration extends BaseConfiguration {
+ private final DatabaseSession session;
+ private Integer resourceId = null;
+
+ public ResourceDatabaseConfiguration(DatabaseSession session, ResourceModel resource) {
+ this.session = session;
+ if (resource != null) {
+ this.resourceId = resource.getId();
+ }
+ load();
+ }
+
+ public ResourceDatabaseConfiguration(DatabaseSession session, Integer resourceId) {
+ this.session = session;
+ this.resourceId = resourceId;
+ load();
+ }
+
+ public ResourceDatabaseConfiguration(DatabaseSession session, String resourceKey) {
+ this.session = session;
+
+ ResourceModel resource = session.getSingleResult(ResourceModel.class, "key", resourceKey);
+ if (resource != null) {
+ this.resourceId = resource.getId();
+ }
+ load();
+ }
+
+ public void load() {
+ clear();
+
+ loadResourceProperties();
+ }
+
+ private void loadResourceProperties() {
+ if (resourceId != null) {
+ List<Property> properties = session
+ .createQuery("from " + Property.class.getSimpleName() + " p where p.resourceId=:resourceId")
+ .setParameter("resourceId", resourceId)
+ .getResultList();
+
+ registerProperties(properties);
+ }
+ }
+
+ private void registerProperties(List<Property> properties) {
+ if (properties != null) {
+ for (Property property : properties) {
+ setProperty(property.getKey(), property.getValue());
+ }
+ }
+ }
+
+}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.database.configuration;
+
+import org.apache.commons.configuration.BaseConfiguration;
+import org.sonar.api.database.DatabaseSession;
+import org.sonar.jpa.session.DatabaseSessionFactory;
+
+import java.util.List;
+
+/**
+ * IMPORTANT : This class can't be moved to org.sonar.jpa.dao for backward-compatibility reasons.
+ * This class is still used in some plugins.
+ *
+ * @since 1.10
+ * @deprecated in 3.7. Replaced by {@link org.sonar.api.config.Settings}
+ */
+@Deprecated
+public class DatabaseConfiguration extends BaseConfiguration {
+ private DatabaseSessionFactory sessionFactory;
+ private DatabaseSession session;
+
+ public DatabaseConfiguration(DatabaseSessionFactory sessionFactory) {
+ this.sessionFactory = sessionFactory;
+ load();
+ }
+
+ public DatabaseConfiguration(DatabaseSession session) {
+ this.session = session;
+ load();
+ }
+
+ public final void load() {
+ clear();
+
+ // Ugly workaround before the move to myBatis
+ // Session is not up-to-date when Ruby on Rails inserts new rows in its own transaction. Seems like
+ // Hibernate keeps a cache...
+ getSession().commit();
+
+ List<Property> properties = getSession()
+ .createQuery("from " + Property.class.getSimpleName() + " p where p.resourceId is null and p.userId is null")
+ .getResultList();
+
+ if (properties != null) {
+ for (Property property : properties) {
+ setProperty(property.getKey(), property.getValue());
+ }
+ }
+ }
+
+ private DatabaseSession getSession() {
+ if (session != null) {
+ return session;
+ }
+ return sessionFactory.getSession();
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.database.configuration;
+
+import org.junit.Test;
+import org.sonar.jpa.test.AbstractDbUnitTestCase;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class DatabaseConfigurationTest extends AbstractDbUnitTestCase {
+
+ @Test
+ public void shouldLoadPropertiesFromDatabase() {
+ setupData("some-properties");
+
+ DatabaseConfiguration configuration = new DatabaseConfiguration(getSessionFactory());
+
+ assertEquals("value1", configuration.getString("key1"));
+ assertEquals("value2", configuration.getString("key2"));
+ assertNull(configuration.getString("keyxxxx"));
+ }
+}