You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SonarDuplicationsIndex.java 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Sonar, open source software quality management tool.
  3. * Copyright (C) 2008-2011 SonarSource
  4. * mailto:contact AT sonarsource DOT com
  5. *
  6. * Sonar is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * Sonar is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with Sonar; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
  19. */
  20. package org.sonar.plugins.cpd.index;
  21. import java.util.Collection;
  22. import java.util.List;
  23. import org.sonar.api.resources.Resource;
  24. import org.sonar.duplications.block.Block;
  25. import org.sonar.duplications.block.ByteArray;
  26. import org.sonar.duplications.index.AbstractCloneIndex;
  27. import org.sonar.duplications.index.CloneIndex;
  28. import org.sonar.duplications.index.PackedMemoryCloneIndex;
  29. import com.google.common.collect.Lists;
  30. public class SonarDuplicationsIndex extends AbstractCloneIndex {
  31. private final CloneIndex mem = new PackedMemoryCloneIndex();
  32. private final DbDuplicationsIndex db;
  33. public SonarDuplicationsIndex() {
  34. this(null);
  35. }
  36. public SonarDuplicationsIndex(DbDuplicationsIndex db) {
  37. this.db = db;
  38. }
  39. public void insert(Resource resource, Collection<Block> blocks) {
  40. for (Block block : blocks) {
  41. mem.insert(block);
  42. }
  43. if (db != null) {
  44. db.insert(resource, blocks);
  45. }
  46. }
  47. public Collection<Block> getByResource(Resource resource, String resourceKey) {
  48. if (db != null) {
  49. db.prepareCache(resource);
  50. }
  51. return mem.getByResourceId(resourceKey);
  52. }
  53. public Collection<Block> getBySequenceHash(ByteArray hash) {
  54. if (db == null) {
  55. return mem.getBySequenceHash(hash);
  56. } else {
  57. List<Block> result = Lists.newArrayList(mem.getBySequenceHash(hash));
  58. result.addAll(db.getByHash(hash));
  59. return result;
  60. }
  61. }
  62. public Collection<Block> getByResourceId(String resourceId) {
  63. throw new UnsupportedOperationException();
  64. }
  65. public void insert(Block block) {
  66. throw new UnsupportedOperationException();
  67. }
  68. }