summaryrefslogtreecommitdiffstats
path: root/cinder-client/src/main/java/com/woorea/openstack/cinder/VolumesExtension.java
blob: 3e6bf974a1ac917d28c5e5cacc95e5f06058b74d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/* ============LICENSE_START=======================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
package com.woorea.openstack.cinder;

import com.woorea.openstack.base.client.Entity;
import com.woorea.openstack.base.client.HttpMethod;
import com.woorea.openstack.base.client.OpenStackClient;
import com.woorea.openstack.base.client.OpenStackRequest;
import com.woorea.openstack.cinder.model.ConnectionForInitialize;
import com.woorea.openstack.cinder.model.ConnectionForTerminate;
import com.woorea.openstack.cinder.model.ConnectionInfo;
import com.woorea.openstack.cinder.model.Metadata;
import com.woorea.openstack.cinder.model.Volume;
import com.woorea.openstack.cinder.model.VolumeForCreate;
import com.woorea.openstack.cinder.model.VolumeForExtend;
import com.woorea.openstack.cinder.model.VolumeForImageCreate;
import com.woorea.openstack.cinder.model.VolumeForUpdate;
import com.woorea.openstack.cinder.model.Volumes;

public class VolumesExtension {

    private final OpenStackClient CLIENT;

    public VolumesExtension(OpenStackClient client) {
        CLIENT = client;
    }

    public List list(boolean detail) {
        return new List(detail);
    }

    public Create create(VolumeForCreate volume) {
        return new Create(volume);
    }

    public UploadToImage uploadToImage(VolumeForImageCreate volumeForImage) {
        return new UploadToImage(volumeForImage);
    }

    public Show show(String id) {
        return new Show(id);
    }

    public ShowMetadata showMetadata(String id) {
        return new ShowMetadata(id);
    }

    public Delete delete(String id) {
        return new Delete(id);
    }

    public Update update(String id, VolumeForUpdate volume) {
        return new Update(id, volume);
    }

    public Extend extend(String id, int newSize) {
        VolumeForExtend volume = new VolumeForExtend();
        volume.setSize(newSize);
        return new Extend(id, volume);
    }

    public InitializeConnection initializeConnection(String id, ConnectionForInitialize connectionForInitialize) {
        return new InitializeConnection(id, connectionForInitialize);
    }

    public TerminateConnection terminateConnection(String id, ConnectionForTerminate connectionForTerminate) {
        return new TerminateConnection(id, connectionForTerminate);
    }

    public class List extends OpenStackRequest<Volumes> {

        public List(boolean detail) {
            super(CLIENT, HttpMethod.GET, detail ? "/volumes/detail"
                    : "/volumes", null, Volumes.class);
        }

    }

    public class Create extends OpenStackRequest<Volume> {

        public Create(VolumeForCreate volume) {
            super(CLIENT, HttpMethod.POST, "/volumes", Entity.json(volume),
                    Volume.class);
        }

    }

    // Upload volume to image service as image

    public class UploadToImage extends OpenStackRequest<Void> {

        public UploadToImage(VolumeForImageCreate volumeForImageCreate) {
            super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/")
                    .append(volumeForImageCreate.getVolumeId() + "/action").toString(),
                    Entity.json(volumeForImageCreate), Void.class);
        }

    }

    public class Show extends OpenStackRequest<Volume> {

        public Show(String id) {
            super(CLIENT, HttpMethod.GET, new StringBuilder("/volumes/")
                    .append(id).toString(), null, Volume.class);
        }

    }

    public class ShowMetadata extends OpenStackRequest<Metadata> {

        public ShowMetadata(String id) {
            super(CLIENT, HttpMethod.GET, new StringBuilder("/volumes/")
                    .append(id).append("/metadata").toString(), null,
                    Metadata.class);
        }

    }

    public class Delete extends OpenStackRequest<Void> {

        public Delete(String id) {
            super(CLIENT, HttpMethod.DELETE, new StringBuilder("/volumes/")
                    .append(id).toString(), null, Void.class);
        }

    }

    public class Update extends OpenStackRequest<Void> {

        public Update(String id, VolumeForUpdate volume) {
            super(CLIENT, HttpMethod.PUT, new StringBuilder("/volumes/").append(id).toString(),
                    Entity.json(volume), Void.class);
        }

    }

    public class Extend extends OpenStackRequest<Void> {

        public Extend(String id, VolumeForExtend volume) {
            super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/").append(id).append("/action").toString(),
                    Entity.json(volume), Void.class);
        }

    }

    public class InitializeConnection extends OpenStackRequest<ConnectionInfo> {

        public InitializeConnection(String id, ConnectionForInitialize connectionForInitialize) {
            super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/")
                    .append(id).append("/action").toString(),
                    Entity.json(connectionForInitialize), ConnectionInfo.class);
        }

    }

    public class TerminateConnection extends OpenStackRequest<Void> {

        public TerminateConnection(String id, ConnectionForTerminate connectionForTerminate) {
            super(CLIENT, HttpMethod.POST, new StringBuilder("/volumes/")
                            .append(id).append("/action").toString(),
                    Entity.json(connectionForTerminate), Void.class);
        }

    }

}