blob: 2e2406f3de35294896e280b57d505197a6d6af86 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.sqoop.json;
import static org.apache.sqoop.json.util.ConfigInputSerialization.extractConfigList;
import static org.apache.sqoop.json.util.ConfigInputSerialization.restoreConfigList;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import org.apache.sqoop.classification.InterfaceAudience;
import org.apache.sqoop.classification.InterfaceStability;
import org.apache.sqoop.model.MConfig;
import org.apache.sqoop.model.MLink;
import org.apache.sqoop.model.MLinkConfig;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
/**
* Link representation that is being send across the network between Sqoop
* server and client. Server might optionally send configs associated with the
* links to spare client of sending another HTTP requests to obtain them.
*/
@InterfaceAudience.Private
@InterfaceStability.Unstable
public class LinkBean implements JsonBean {
static final String CONNECTOR_ID = "connector-id";
static final String LINK_CONFIG_VALUES = "link-config-values";
static final String LINK = "link";
// Required
// Stores all links for a given connector
private List<MLink> links;
// Optional
private Map<Long, ResourceBundle> linkConfigBundles;
// For "extract"
public LinkBean(MLink link) {
this();
this.links = new ArrayList<MLink>();
this.links.add(link);
}
public LinkBean(List<MLink> links) {
this();
this.links = links;
}
// For "restore"
public LinkBean() {
linkConfigBundles = new HashMap<Long, ResourceBundle>();
}
public void addConnectorConfigBundle(Long id, ResourceBundle connectorConfigBundle) {
linkConfigBundles.put(id, connectorConfigBundle);
}
public boolean hasConnectorConfigBundle(Long id) {
return linkConfigBundles.containsKey(id);
}
public List<MLink> getLinks() {
return links;
}
public ResourceBundle getConnectorConfigBundle(Long id) {
return linkConfigBundles.get(id);
}
@SuppressWarnings("unchecked")
@Override
public JSONObject extract(boolean skipSensitive) {
JSONObject link = new JSONObject();
link.put(LINK, extractLink(skipSensitive, links.get(0)));
return link;
}
@SuppressWarnings("unchecked")
protected JSONArray extractLinks(boolean skipSensitive) {
JSONArray linkArray = new JSONArray();
for (MLink link : links) {
linkArray.add(extractLink(skipSensitive, link));
}
return linkArray;
}
@SuppressWarnings("unchecked")
private JSONObject extractLink(boolean skipSensitive, MLink link) {
JSONObject linkJsonObject = new JSONObject();
linkJsonObject.put(ID, link.getPersistenceId());
linkJsonObject.put(NAME, link.getName());
linkJsonObject.put(ENABLED, link.getEnabled());
linkJsonObject.put(CREATION_USER, link.getCreationUser());
linkJsonObject.put(CREATION_DATE, link.getCreationDate().getTime());
linkJsonObject.put(UPDATE_USER, link.getLastUpdateUser());
linkJsonObject.put(UPDATE_DATE, link.getLastUpdateDate().getTime());
linkJsonObject.put(CONNECTOR_ID, link.getConnectorId());
linkJsonObject.put(LINK_CONFIG_VALUES,
extractConfigList(link.getConnectorLinkConfig().getConfigs(), link.getConnectorLinkConfig().getType(), skipSensitive));
return linkJsonObject;
}
@Override
public void restore(JSONObject jsonObject) {
links = new ArrayList<MLink>();
JSONObject obj = (JSONObject) jsonObject.get(LINK);
links.add(restoreLink(obj));
}
protected void restoreLinks(JSONArray array) {
links = new ArrayList<MLink>();
for (Object obj : array) {
links.add(restoreLink(obj));
}
}
private MLink restoreLink(Object obj) {
JSONObject object = (JSONObject) obj;
long connectorId = (Long) object.get(CONNECTOR_ID);
JSONArray connectorLinkConfig = (JSONArray) object.get(LINK_CONFIG_VALUES);
List<MConfig> linkConfig = restoreConfigList(connectorLinkConfig);
MLink link = new MLink(connectorId, new MLinkConfig(linkConfig));
link.setPersistenceId((Long) object.get(ID));
link.setName((String) object.get(NAME));
link.setEnabled((Boolean) object.get(ENABLED));
link.setCreationUser((String) object.get(CREATION_USER));
link.setCreationDate(new Date((Long) object.get(CREATION_DATE)));
link.setLastUpdateUser((String) object.get(UPDATE_USER));
link.setLastUpdateDate(new Date((Long) object.get(UPDATE_DATE)));
return link;
}
}