| /********************************************************************* |
| * Copyright (c) 2008 The University of York. |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| **********************************************************************/ |
| package org.eclipse.epsilon.emc.simulink.types; |
| |
| import java.lang.reflect.Constructor; |
| import java.lang.reflect.InvocationTargetException; |
| import java.lang.reflect.Method; |
| |
| import org.eclipse.epsilon.emc.simulink.engine.MatlabClassLoader; |
| import org.eclipse.epsilon.emc.simulink.engine.MatlabEngine; |
| import org.eclipse.epsilon.eol.exceptions.EolRuntimeException; |
| |
| public class CellStr extends AbstractType { |
| |
| private static final String CELL_STR_MATLAB_CLASS = "com.mathworks.matlab.types.CellStr"; |
| |
| private static Class<?> cell_str_class; |
| |
| protected Method getStringArrayMethod; |
| protected Method equalsMethod; |
| |
| public static boolean is(Object obj) { |
| return (getMatlabClass() == null) ? false : getMatlabClass().isInstance(obj); |
| } |
| |
| protected static Class<?> getMatlabClass() { |
| if (cell_str_class == null) { |
| try { |
| cell_str_class = MatlabClassLoader.getInstance().loadMatlabClass(CELL_STR_MATLAB_CLASS); |
| } catch (ClassNotFoundException e) { |
| e.printStackTrace(); |
| } |
| } |
| return cell_str_class; |
| } |
| |
| public CellStr(Object cellStr) { |
| super(); |
| if (is(cellStr)) { |
| this.object = cellStr; |
| init(); |
| } |
| } |
| |
| public CellStr(MatlabEngine engine) { |
| super(engine); |
| } |
| |
| public CellStr(String[] stringArray) { |
| try { |
| Constructor<?> constructor = getMatlabClass().getConstructor(String[].class); |
| object = constructor.newInstance((Object)stringArray); |
| } catch (NoSuchMethodException | SecurityException e) { |
| e.printStackTrace(); |
| System.out.println("Problem retrieving constructor of the complex type"); |
| } catch (InstantiationException | IllegalAccessException | IllegalArgumentException |
| | InvocationTargetException e) { |
| System.out.println("Problem instantiating the complex type"); |
| e.printStackTrace(); |
| } |
| } |
| |
| public CellStr(String[][] stringArray) { |
| try { |
| Constructor<?> constructor = getMatlabClass().getConstructor(String[][].class); |
| object = constructor.newInstance((Object) stringArray); |
| } catch (NoSuchMethodException | SecurityException e) { |
| e.printStackTrace(); |
| System.out.println("Problem retrieving constructor of the complex type"); |
| } catch (InstantiationException | IllegalAccessException | IllegalArgumentException |
| | InvocationTargetException e) { |
| System.out.println("Problem instantiating the complex type"); |
| e.printStackTrace(); |
| } |
| } |
| |
| @Override |
| protected void init() { |
| Class<?> clazz = getMatlabClass(); |
| try { |
| getStringArrayMethod = getStringArrayMethod == null ? clazz.getDeclaredMethod("getStringArray") : null; |
| equalsMethod = equalsMethod == null ? clazz.getDeclaredMethod("equals", Object.class) : null; |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| public Object getStringArray() { |
| try { |
| return (Integer) getStringArrayMethod.invoke(object); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| throw new IllegalStateException(e.getMessage()); |
| } |
| } |
| |
| @Override |
| public boolean equals(Object object) { |
| try { |
| return (Boolean) equalsMethod.invoke(object, object); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| throw new IllegalStateException(e.getMessage()); |
| } |
| } |
| |
| @Override |
| public Object getProperty(String property) throws EolRuntimeException { |
| // TODO Auto-generated method stub |
| return null; |
| } |
| |
| @Override |
| public void setProperty(String property, Object value) throws EolRuntimeException { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| @Override |
| protected Object getObject() { |
| return object; |
| } |
| |
| } |