class RotateLayout extends AbstractLayout implements Layout {

    private double angle;
    private Graph graph;

    public RotateLayout(LayoutBuilder layoutBuilder, double angle) {
        super(layoutBuilder);
        this.angle = angle;
    }

    @Override
    public void initAlgo() {
        setConverged(false);
    }

    @Override
    public void goAlgo() {<FILL_FUNCTION_BODY>}

    @Override
    public void endAlgo() {
    }

    @Override
    public void resetPropertiesValues() {
    }

    @Override
    public LayoutProperty[] getProperties() {
        List<LayoutProperty> properties = new ArrayList<>();
        try {
            properties.add(LayoutProperty.createProperty(
                this, Double.class,
                NbBundle.getMessage(getClass(), "rotate.angle.name"),
                null,
                "clockwise.angle.name",
                NbBundle.getMessage(getClass(), "rotate.angle.desc"),
                "getAngle", "setAngle"));
        } catch (Exception e) {
            Exceptions.printStackTrace(e);
        }
        return properties.toArray(new LayoutProperty[0]);
    }

    /**
     * @return the angle
     */
    public Double getAngle() {
        return angle;
    }

    /**
     * @param angle the angle to set
     */
    public void setAngle(Double angle) {
        this.angle = angle;
    }
}

        graph = graphModel.getGraphVisible();
        graph.readLock();
        try {
            double sin = Math.sin(-getAngle() * Math.PI / 180);
            double cos = Math.cos(-getAngle() * Math.PI / 180);
            double px = 0f;
            double py = 0f;

            for (Node n : graph.getNodes()) {
                if (!n.isFixed()) {
                    double dx = n.x() - px;
                    double dy = n.y() - py;

                    n.setX((float) (px + dx * cos - dy * sin));
                    n.setY((float) (py + dy * cos + dx * sin));
                }
            }
            setConverged(true);
        } finally {
            graph.readUnlockAll();
        }
    
<methods>public void <init>(org.gephi.layout.spi.LayoutBuilder) ,public boolean canAlgo() ,public static void ensureSafeLayoutNodePositions(GraphModel) ,public org.gephi.layout.spi.LayoutBuilder getBuilder() ,public boolean isConverged() ,public void setConverged(boolean) ,public void setGraphModel(GraphModel) <variables>private boolean converged,protected GraphModel graphModel,private final non-sealed org.gephi.layout.spi.LayoutBuilder layoutBuilder