To solve the optimization problem described, we first need to convert the natural language description into a symbolic representation. This involves defining variables, an objective function, and constraints based on the given information.

Let's define:
- \(x_1\) as the number of sliding doors made per day,
- \(x_2\) as the number of windows made per day.

The objective is to maximize profit, with the profit per sliding door being $30 and the profit per window being $25. Thus, the objective function can be represented algebraically as:
\[ \text{Maximize: } 30x_1 + 25x_2 \]

Given the constraints:
1. The company must make at least 120 sliding doors per day: \(x_1 \geq 120\),
2. The company must make at least 110 windows per day: \(x_2 \geq 110\),
3. The company can make at most 210 sliding doors per day: \(x_1 \leq 210\),
4. The company can make at most 170 windows per day: \(x_2 \leq 170\),
5. The company has a contract to ship at least 250 products of either type per day: \(x_1 + x_2 \geq 250\).

Therefore, the symbolic representation of the problem in JSON format is:
```json
{
    'sym_variables': [('x1', 'sliding doors'), ('x2', 'windows')],
    'objective_function': '30*x1 + 25*x2',
    'constraints': ['x1 >= 120', 'x2 >= 110', 'x1 <= 210', 'x2 <= 170', 'x1 + x2 >= 250']
}
```

To solve this linear programming problem using Gurobi in Python, we can use the following code:

```python
from gurobipy import *

# Create a new model
m = Model("Glass_Company_Optimization")

# Define variables
x1 = m.addVar(name="sliding_doors", vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name="windows", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(30*x1 + 25*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 >= 120, name="min_sliding_doors")
m.addConstr(x2 >= 110, name="min_windows")
m.addConstr(x1 <= 210, name="max_sliding_doors")
m.addConstr(x2 <= 170, name="max_windows")
m.addConstr(x1 + x2 >= 250, name="total_products")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Sliding doors: {x1.x}")
    print(f"Windows: {x2.x}")
    print(f"Total profit: {m.objVal}")
else:
    print("No optimal solution found")
```