From 4bd523b5f9c434766829db0b76a0918ad327af65 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Tue, 16 Jul 2013 14:46:26 +0200 Subject: [PATCH] Revert drop of non-deprecated classes --- .../batch/ResourceDatabaseConfiguration.java | 87 +++++++++++++++++++ .../configuration/DatabaseConfiguration.java | 75 ++++++++++++++++ .../DatabaseConfigurationTest.java | 40 +++++++++ 3 files changed, 202 insertions(+) create mode 100644 sonar-batch/src/main/java/org/sonar/batch/ResourceDatabaseConfiguration.java create mode 100644 sonar-core/src/main/java/org/sonar/api/database/configuration/DatabaseConfiguration.java create mode 100644 sonar-core/src/test/java/org/sonar/api/database/configuration/DatabaseConfigurationTest.java diff --git a/sonar-batch/src/main/java/org/sonar/batch/ResourceDatabaseConfiguration.java b/sonar-batch/src/main/java/org/sonar/batch/ResourceDatabaseConfiguration.java new file mode 100644 index 00000000000..842b2fba8dd --- /dev/null +++ b/sonar-batch/src/main/java/org/sonar/batch/ResourceDatabaseConfiguration.java @@ -0,0 +1,87 @@ +/* + * 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 properties = session + .createQuery("from " + Property.class.getSimpleName() + " p where p.resourceId=:resourceId") + .setParameter("resourceId", resourceId) + .getResultList(); + + registerProperties(properties); + } + } + + private void registerProperties(List properties) { + if (properties != null) { + for (Property property : properties) { + setProperty(property.getKey(), property.getValue()); + } + } + } + +} diff --git a/sonar-core/src/main/java/org/sonar/api/database/configuration/DatabaseConfiguration.java b/sonar-core/src/main/java/org/sonar/api/database/configuration/DatabaseConfiguration.java new file mode 100644 index 00000000000..0adb6532385 --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/api/database/configuration/DatabaseConfiguration.java @@ -0,0 +1,75 @@ +/* + * 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 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 diff --git a/sonar-core/src/test/java/org/sonar/api/database/configuration/DatabaseConfigurationTest.java b/sonar-core/src/test/java/org/sonar/api/database/configuration/DatabaseConfigurationTest.java new file mode 100644 index 00000000000..6edd7162a54 --- /dev/null +++ b/sonar-core/src/test/java/org/sonar/api/database/configuration/DatabaseConfigurationTest.java @@ -0,0 +1,40 @@ +/* + * 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")); + } +} -- 2.39.5