r4fterman/pdf.forms

View on GitHub
src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java

Summary

Maintainability
D
2 days
Test Coverage
F
45%

File BorderPropertiesPanel.java has 360 lines of code (exceeds 250 allowed). Consider refactoring.
Open

package org.pdf.forms.gui.properties.border;

import static java.util.stream.Collectors.toUnmodifiableList;

import java.awt.*;

    BorderPropertiesPanel has 24 methods (exceeds 20 allowed). Consider refactoring.
    Open

    public class BorderPropertiesPanel extends JPanel {
    
        private static final String[] BORDER_STYLES = {
                "None",
                "Solid",

      Method createBordersPanel has 59 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          private JPanel createBordersPanel() {
              final JPanel panel = new JPanel();
              panel.setBorder(BorderFactory.createTitledBorder("Borders"));
      
              final JLabel leftEdgesIcon = new JLabel(new ImageIcon(getClass()

        Method createBackgroundPanel has 42 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            private JPanel createBackgroundPanel() {
                final JPanel panel = new JPanel();
                panel.setBorder(BorderFactory.createTitledBorder("Background Fill"));
        
                final JLabel styleLabel = new JLabel("Style:");

          Method initComponents has 32 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              private void initComponents() {
                  final JPanel panel = createBordersPanel();
                  final JPanel backgroundPanel = createBackgroundPanel();
          
                  final GroupLayout layout = new GroupLayout(this);

            Define a constant instead of duplicating this literal "mixed" 4 times.
            Open

                    if (borderWidthBox.getText().equals("mixed")) {

            Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

            On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

            Noncompliant Code Example

            With the default threshold of 3:

            public void run() {
              prepare("action1");                              // Noncompliant - "action1" is duplicated 3 times
              execute("action1");
              release("action1");
            }
            
            @SuppressWarning("all")                            // Compliant - annotations are excluded
            private void method1() { /* ... */ }
            @SuppressWarning("all")
            private void method2() { /* ... */ }
            
            public String method3(String a) {
              System.out.println("'" + a + "'");               // Compliant - literal "'" has less than 5 characters and is excluded
              return "";                                       // Compliant - literal "" has less than 5 characters and is excluded
            }
            

            Compliant Solution

            private static final String ACTION_1 = "action1";  // Compliant
            
            public void run() {
              prepare(ACTION_1);                               // Compliant
              execute(ACTION_1);
              release(ACTION_1);
            }
            

            Exceptions

            To prevent generating some false-positives, literals having less than 5 characters are excluded.

            Remove this useless assignment to local variable "backgroundStyleToUse".
            Open

                    final String backgroundStyleToUse = getBackgroundStyle(widgets);

            A dead store happens when a local variable is assigned a value that is not read by any subsequent instruction. Calculating or retrieving a value only to then overwrite it or throw it away, could indicate a serious error in the code. Even if it's not an error, it is at best a waste of resources. Therefore all calculated values should be used.

            Noncompliant Code Example

            i = a + b; // Noncompliant; calculation result not used before value is overwritten
            i = compute();
            

            Compliant Solution

            i = a + b;
            i += compute();
            

            Exceptions

            This rule ignores initializations to -1, 0, 1, null, true, false and "".

            See

            Similar blocks of code found in 5 locations. Consider refactoring.
            Open

                private String getBackgroundColor(final Set<IWidget> widgets) {
                    final List<String> backgroundColors = widgets.stream()
                            .map(widget -> widget.getWidgetModel().getProperties().getBorder())
                            .filter(Optional::isPresent)
                            .map(Optional::get)
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 310..320
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 322..332
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 334..344
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 346..356

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 70.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 5 locations. Consider refactoring.
            Open

                private String getBackgroundStyle(final Set<IWidget> widgets) {
                    final List<String> styles = widgets.stream()
                            .map(widget -> widget.getWidgetModel().getProperties().getBorder())
                            .filter(Optional::isPresent)
                            .map(Optional::get)
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 310..320
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 322..332
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 334..344
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 358..368

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 70.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 5 locations. Consider refactoring.
            Open

                private String getBorderColor(final Set<IWidget> widgets) {
                    final List<String> borderColors = widgets.stream()
                            .map(widget -> widget.getWidgetModel().getProperties().getBorder())
                            .filter(Optional::isPresent)
                            .map(Optional::get)
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 310..320
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 322..332
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 346..356
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 358..368

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 70.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 5 locations. Consider refactoring.
            Open

                private String getBorderWidth(final Set<IWidget> widgets) {
                    final List<String> borderWidth = widgets.stream()
                            .map(widget -> widget.getWidgetModel().getProperties().getBorder())
                            .filter(Optional::isPresent)
                            .map(Optional::get)
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 310..320
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 334..344
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 346..356
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 358..368

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 70.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 5 locations. Consider refactoring.
            Open

                private String getBorderStyle(final Set<IWidget> widgets) {
                    final List<String> borderStyles = widgets.stream()
                            .map(widget -> widget.getWidgetModel().getProperties().getBorder())
                            .filter(Optional::isPresent)
                            .map(Optional::get)
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 322..332
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 334..344
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 346..356
            src/main/java/org/pdf/forms/gui/properties/border/BorderPropertiesPanel.java on lines 358..368

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 70.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Identical blocks of code found in 2 locations. Consider refactoring.
            Open

                private String findCommonOrMixedValue(final List<String> values) {
                    final int numberOfIdenticalItems = Collections.frequency(values, values.get(0));
                    final boolean listContainsOnlyEqualValues = numberOfIdenticalItems == values.size();
                    if (listContainsOnlyEqualValues) {
                        return values.get(0);
            src/main/java/org/pdf/forms/gui/properties/object/value/SimpleValuePanel.java on lines 155..162

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 54.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Wrong lexicographical order for 'java.awt.event.FocusAdapter' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.awt.event.FocusAdapter;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.awt.image.BufferedImage' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.awt.image.BufferedImage;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.util.Optional' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.util.Optional;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Line is longer than 100 characters (found 104).
            Open

                                        .ifPresent(color -> borders.setBorderColor(String.valueOf(color.getRGB())));

            Checks for long lines.

            Rationale: Long lines are hard to read in printouts or if developershave limited screen space for the source code, e.g. if the IDEdisplays additional information like project tree, class hierarchy,etc.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.util.Set' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.util.Set;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.awt.event.FocusEvent' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.awt.event.FocusEvent;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.awt.event.ActionListener' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.awt.event.ActionListener;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Line is longer than 100 characters (found 112).
            Open

                                            .add(borderWidthBox, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE)

            Checks for long lines.

            Rationale: Long lines are hard to read in printouts or if developershave limited screen space for the source code, e.g. if the IDEdisplays additional information like project tree, class hierarchy,etc.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Using the '.*' form of import should be avoided - java.awt.*.
            Open

            import java.awt.*;

            Checks that there are no import statements that use the * notation.

            Rationale: Importing all classes from a package or staticmembers from a class leads to tight coupling between packagesor classes and might lead to problems when a new version of alibrary introduces name clashes.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.util.Arrays' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.util.Arrays;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Line is longer than 100 characters (found 107).
            Open

                                        .ifPresent(width -> borders.setBorderWidth(String.valueOf(Math.round(width))));

            Checks for long lines.

            Rationale: Long lines are hard to read in printouts or if developershave limited screen space for the source code, e.g. if the IDEdisplays additional information like project tree, class hierarchy,etc.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Extra separation in import group before 'java.awt.*'
            Open

            import java.awt.*;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.util.Collections' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.util.Collections;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Extra separation in import group before 'com.google.common.primitives.Doubles'
            Open

            import com.google.common.primitives.Doubles;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.awt.event.ActionEvent' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.awt.event.ActionEvent;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.util.List' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.util.List;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'java.awt.*' import. Should be before 'java.util.stream.Collectors.toUnmodifiableList'.
            Open

            import java.awt.*;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Using the '.*' form of import should be avoided - javax.swing.*.
            Open

            import javax.swing.*;

            Checks that there are no import statements that use the * notation.

            Rationale: Importing all classes from a package or staticmembers from a class leads to tight coupling between packagesor classes and might lead to problems when a new version of alibrary introduces name clashes.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Line is longer than 100 characters (found 115).
            Open

                                            .add(borderColorButton, GroupLayout.PREFERRED_SIZE, 23, GroupLayout.PREFERRED_SIZE)

            Checks for long lines.

            Rationale: Long lines are hard to read in printouts or if developershave limited screen space for the source code, e.g. if the IDEdisplays additional information like project tree, class hierarchy,etc.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Wrong lexicographical order for 'com.google.common.primitives.Doubles' import. Should be before 'org.pdf.forms.widgets.IWidget'.
            Open

            import com.google.common.primitives.Doubles;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Extra separation in import group before 'javax.swing.*'
            Open

            import javax.swing.*;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Extra separation in import group before 'org.jdesktop.layout.GroupLayout'
            Open

            import org.jdesktop.layout.GroupLayout;

            Checks that the groups of import declarations appear in the order specifiedby the user. If there is an import but its group is not specified in theconfiguration such an import should be placed at the end of the import list.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            Line is longer than 100 characters (found 111).
            Open

                                            .add(leftEdgesIcon, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE)

            Checks for long lines.

            Rationale: Long lines are hard to read in printouts or if developershave limited screen space for the source code, e.g. if the IDEdisplays additional information like project tree, class hierarchy,etc.

            This documentation is written and maintained by the Checkstyle community and is covered under the same license as the Checkstyle project.

            There are no issues that match your filters.

            Category
            Status